关于在定时器中切换动画的问题

小弟正在学习,一头雾水,遇到一个很奇怪的问题,不知道是我写错了,还是什么问题,希望大家帮忙.

思路是,一个sprite有一个基础动画,是一直播放的,实现代码:

this._block = cc.Sprite.createWithSpriteFrame(cc.spriteFrameCache.getSpriteFrame(“shake0001.png”));
this._block.setPosition(GC.left, GC.down);
this.addChild(this._block);
this._block.runAction(cc.repeatForever(this.getAnimation(null)));

这一步是没有问题的,getAnimation方法是自定义方法,根据参数返回不同的动画.

然后启动定时器:

this.schedule(this.moveBlock, 3);
每三秒调用一次moveBlock方法.方法主要实现移动物体,并且在移动的同时播放一个其他的动画.
方法中,下面这一句就会报错
this._block.runAction(cc.spawn(cc.moveTo(0.3, position),this.getAnimation(“down”)));
错误信息:Error: Invalid Native Object

但是把这句放到定时器以外执行是没有问题的.实在找不到问题了.特此开帖,希望各位大大们帮忙一下.

this.moveBlock执行的是什么?

更改_block的position

var self = this;
this._block.runAction(cc.repeatForever(
cc.sequence(
cc.spawn(cc.moveTo(0.3, position),self .getAnimation(“down”)),
cc.delayTime(3)
)
));
不用 schedule,用上面这个试试

果然可以,不过我要改一下我的代码逻辑了.不过,还是不明白为什么定时器不成呢?

确定你this指向谁,这个在js中很关键。我建议schedule和action不要混用,会让你自己都混乱吧。

你的方法,虽然可以实现,但是不能满足我的要求,如果是this的作用域的问题的话,为什么我把getAnimation(“down”)换成cc.rotateBy就没有问题了?
另外我想问的是,定时器满足不了这个需求么?因为我要在调用的方法中动态计算一些东西,比如往哪里移动,移动方向的不同,就决定了使用哪个动画.
你这个方法是可以跑,不过满足不了我的需求.

还有,this这个东西,到底应该怎么用呢?

比如
this._block.schedule(this.moveBlock, 3);

这样定义定时器.
那我在moveBlock中的this指向的是谁呢?
在moveBlock中我也获取了其他的东西,是没有问题的,只是执行动作的时候报错了.

万网不吝赐教.

cc.callFunc,这也是action的

不是很明白,能给我说一下么?

你可以描述下你想要实现的效果么?我好理解,然后想想方案。你在cocojs的群里面不?

186828918我在这个群里

我在这个群里186828918

Cocos官方交流7群(JS) 182142281

你是哪个,我入群了

北京-五花膘

this.schedule(this.moveBlock, 3);
this._block.schedule(this.moveBlock, 3);
你这里到底是schedule的谁呢? 应该就是你moveBlock里的this 不对了 你调试一下 看看两个this是否一样的