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

我希望这能帮到您。我正在使用这种方式来处理特定的触摸事件。

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);
于 2013-08-04T16:31:22.307 回答
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 回答