0

私は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);
      }
    }
4

3 に答える 3

1

そのための非常に最適なソリューションがあります。使用する:

sprite.getBoundingBox.contains(x,y);

ここで、x と y はタッチした場所の位置です。

于 2012-07-26T05:49:10.040 に答える
0

私は cocos2d のマスターではありませんが、コードをチェックする際にロジックが少しずれているようです。タッチ ポイントがスプライトの現在の領域内にあるかどうかを確認します (つまり、((location.x >= sprite.start.x && location.x <= sprite.width) && ((location.y >= sprite.start.y && location.y <= sprite.height).

より良い方法は、スプライト クラスを拡張し、点がスプライト領域内にあるかどうかを確認する関数を含めることだと思います ( float isInSpriteArea(CGPoint point))。そうすれば、ポイントをスプライトに渡すだけで、この場合タッチされているかどうかがわかります。

于 2012-04-02T20:23:06.223 に答える