0

私は Cocos2D と Java の初心者なので、無知であることをお許しください。

学習として、(配列に格納された) 画像のコレクションを表示し、それらすべてをタッチ位置に移動させる単純なアプリを作成しています。

以下の For ループでは、配列内の最後の画像のみが移動するため、アクションと MoveTo のこつがよくわかりません。

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はもう開発されていないと思います。学習している場合は、cocos2d-xまたはlibgdxを使用することをお勧めします。

于 2013-09-22T15:31:31.857 に答える