【问题标题】:Android Cocos2d MoveTo ActionsAndroid Cocos2d MoveTo 动作
【发布时间】:2013-09-21 18:10:55
【问题描述】:

我完全是 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

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

【问题讨论】:

    标签: android cocos2d-iphone


    【解决方案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

    【讨论】:

    • 谢谢,这么简单的修复!我没有意识到 Cocos2D 不再为 Android 开发,但这可以解释为什么很难找到指南(我一直在尝试遵循 iOS Cocos2D 的指南)。
    • 很高兴它有帮助:) 我想如果你不尝试任何“不寻常”的东西,你会很好地使用 cocos2d-android,但你可能会错过一些在更高级的东西中工作的东西。无论如何,祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2012-04-14
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多