スプライトに触れるcocos2dアンドロイド

私はcocos2dの新人です。私はすでにこのようなものを試したことがあるスプライトに触れたかどうかを確認するためのコードをjavaで書く方法を知りました。

@Override
public boolean ccTouchesEnded(MotionEvent event)
{

    CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));

    if ((location.x == zom.getPosition().x) && (location.y == zom.getPosition().y))
    {
    CCSprite projectile = CCSprite.sprite("bullet.png");
    projectile.setPosition(CGPoint.ccp(player.getPosition().x,player.getPosition().y));
    addChild(projectile);
    float length = (float)Math.sqrt((100 * 100) + (100 * 100));
    float velocity = 100.0f/1.0f; 
    float realMoveDuration = length/velocity;
    projectile.runAction(CCSequence.actions(
            CCMoveTo.action(realMoveDuration, CGPoint.ccp(location.x, location.y)),
            CCCallFuncN.action(this, "spriteMoveFinished")));
      if ((projectile.getPosition().x == location.x) && ( projectile.getPosition().y == location.y))
      {
          removeChild(projectile, true);
      }
    }
0
追加された 編集された
ビュー: 1
単に不思議なことに、関数は必要に応じてブール値を返しません。
追加された 著者 Raptor,

3 答え

それには最高のソリューションがあります。つかいます:

sprite.getBoundingBox.contains(x,y);

xとyはタッチされた位置の位置です。

1
追加された

これがあなたに役立つことを願っています。私はこの方法を使用して、特定のものに対するタッチイベントを処理します。

public boolean ccTouchesEnded(MotionEvent event) {
        CGPoint location = CCDirector.sharedDirector().convertToGL(
                CGPoint.ccp(event.getX(), event.getY()));
        if (CGRect.containsPoint((newGame1.getBoundingBox()), location)) {

            newGame();

        }

        return super.ccTouchesEnded(event);
    }

これをコンストラクタに追加してください

this.setIsTouchEnabled(true);
1
追加された

While I am not a cocos2d master, it looks like the logic is a bit off in checking your code. You want to check to see if the touch point is in the sprites current area (i.e. is ((location.x >= sprite.start.x && location.x <= sprite.width) && ((location.y >= sprite.start.y && location.y <= sprite.height).

Spriteクラスを拡張し、ポイントがスプライト領域( float isInSpriteArea(CGPoint point))にあるかどうかをチェックして確認する関数を追加することをお勧めします。そうすれば、スプライトにポイントを渡すだけで、この場合はタッチされたかどうかを知ることができます。

0
追加された