我是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
我假设我需要添加某种行动结束命令?我也不明白为什么只有阵列中的最后一张图像移动而不是其余的。
答案 0 :(得分:2)
调用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-x或libgdx。< / p>