cocos2d Android tegen een sprite

Ik ben nieuw in cocos2d en ik vroeg me af hoe ik een code in Java schrijf die controleert of ik een sprite heb aangeraakt. Ik heb al zoiets geprobeerd.

@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
gewoon nieuwsgierig, je functie retourneert geen Boolean, zoals vereist.
toegevoegd de auteur Raptor, de bron

3 antwoord

Daar is een allerbeste oplossing voor. Gebruik:

sprite.getBoundingBox.contains(x,y);

waarbij x en y posities van de aangeraakte locatie zijn.

1
toegevoegd

Ik hoop dat dit je zal helpen. Ik gebruik deze manier om een ​​aanraakgebeurtenis voor een bepaalde haat af te handelen.

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);
    }

voeg dit toe aan constructor

this.setIsTouchEnabled(true);
1
toegevoegd

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).

Ik denk dat een betere manier is om de sprite-klasse uit te breiden en een functie op te nemen om te controleren en te zien of een punt zich in het sprite-gebied bevindt ( float isInSpriteArea (CGPoint-punt) ). Op die manier kun je een punt gewoon doorgeven aan een sprite en het kan je vertellen of het in dit geval aangeraakt is.

0
toegevoegd