0

我完全是 Cocos2D 和 Java 的菜鸟,所以请原谅我的无知,但我非常渴望学习!

通过学习,我正在创建一个简单的应用程序,它显示一组图像(存储在数组中),然后将它们全部移动到触摸位置。

我不能完全掌握动作和 MoveTo 的窍门,因为在下面的 For 循环中,只有数组中的最后一个图像会移动。

public boolean ccTouchesMoved(MotionEvent e){
    CGPoint touchLocation = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(e.getX(), e.getY()));
    CCMoveTo imgMove = CCMoveTo.action(2f, touchLocation);
        for (int i = 0; i < imgs.length; ++i){
            imgs[i].runAction(imgMove); 
        };
    return true;
};

此外,图像并不总是在每次触摸时移动(它有点随机),我在日志中收到此错误:

CCActionManager removeAction: target not found

我假设我需要添加某种动作结束命令?我也不明白为什么只有数组中的最后一个图像移动而不是其余的。

4

1 回答 1

1

调用runAction方法时,对要动画对象的引用存储在动作对象中,因此如果您在每次迭代中运行相同的动作对象,则只会存储最后一张图像。

要解决这个问题,您只需CCMoveTo为数组中的每个图像创建一个动作。此外,在第一次迭代中使用它之前++i递增变量i,因此您将跳过数组的第一个元素。

代码看起来像这样。-

public boolean ccTouchesMoved(MotionEvent e){
    CGPoint touchLocation = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(e.getX(), e.getY()));        
        for (int i = 0; i < imgs.length; i++){
            CCMoveTo imgMove = CCMoveTo.action(2f, touchLocation);
            imgs[i].runAction(imgMove); 
        };
    return true;
};

顺便说一句,我相信cocos2d for android不再处于开发阶段,如果你正在学习,我建议你去cocos2d-xlibgdx

于 2013-09-22T15:31:31.857 回答