cocos2d-js 定时器

1.scheduleUpdate

节点中有scheduleUpdate接口,通过这个接口,可以让游戏在每帧执行都执行update方法

varScheduleUpdateLayer = cc.Layer.extend({ball:null,ctor:function(){this._super();this.scheduleUpdate();// 开启定时器varwinSize = cc.director.getWinSize();varball =newcc.Sprite("res/item_2.png");        ball.x = winSize.width/2;        ball.y = winSize.height/2;this.addChild(ball);this.ball = ball;        cc.eventManager.addListener({// 监听鼠标事件event:cc.EventListener.MOUSE,onMouseDown:function(event){varaction = cc.moveTo(1,event.getLocation().x,event.getLocation().y);                ball.runAction(action);            }        },this)    },update:function(){// 重写update方法console.log(this.ball.x+"---"+this.ball.y);    }})

2. scheduleOnce

scheduleOnce和setTimeout类似,接受两个参数,第一个参数是回调函数,第二个参数是事件,scheduleOnce接受的时间以秒为单位。

节点都有scheduleOnce接口。

varScheduleLayer = cc.Layer.extend({ctor:function(){this._super();this.scheduleOnce(function(){// 2秒后打印日志console.log("scheduleOnce");        },2);    }})

3. schedule

schedule和setInterval类似,实现固定时间间隔不断触发某个函数的功能。

node.schedul(callback, interval, repeat, delay)

interval触发间隔,以秒为单位

repeat重复次数,会执行repeat+1次

delay是第一次出发前的延迟时间,以秒为单位

如果希望schedule无限循环,可以省略后两个参数,也可以设置repeat为常量cc.REPEATE_FOREVER

this.schedule(function(){console.log("schedule");        },2,cc.REPEAT_FOREVER,2);

schedule基于帧数控制,当帧频降低时,schedule会积累大量的误差

一个平衡的定时器

schedule2:function(callback,interval){varthen =Date.now();        interval = interval*1000;this.schedule(function(){varnow =Date.now();vardelta = now-then;if(delta > interval){                then = now - (delta % interval);//如果本次触发延迟了,就让下次触发早一点来抵消误差callback.call(this);            }        }.bind(this),0);// 0表示每帧触发}

4. 取消定时器

取消scheduleUpdate ,使用 node.unscheduleUpdate()

取消scheduleOnce和schedule,使用node.unschedule()

varScheduleLayer = cc.Layer.extend({ctor:function(){this._super();this.schedule(this.tick,1,cc.REPEAT_FOREVER,1);this.tickCount =0;    },tick:function(){console.log("tick");this.tickCount++;if(this.tickCount ==5){this.unschedule(this.tick);        }    }})

5.暂停/恢复定时器

node.pause();//暂停node.resume();//恢复

链接://www.greatytc.com/p/df26c8ef1671

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.scheduleUpdate 节点中有scheduleUpdate接口,通过这个接口,可以让游戏在每帧执行都执...
    写java的逗比叫z1阅读 3,150评论 0 1
  • 1.除了方法, 其他东西都要扔到properties里面了, 并且要给出属性的默认值或者属性的存取的方法 1) 首...
    视掘阅读 1,352评论 0 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,842评论 2 17
  • 千头万绪愁容聚,相由心生不如意。 欲行千里十里阻,生不逢时近而立。 人生五味亦尽然,寸断肝肠又何必。 破涕而笑常几...
    忍者大成阅读 186评论 0 0
  • 我承认,想要的生活发生改变,就要改变行为。而这与gene指引或者更准确的说part gene指引的行为相冲突。 与...
    水平生阅读 177评论 0 0