如何让sprite响应cocos2d android中的触摸

时间:2013-07-01 08:51:18

标签: android cocoa-touch cocos2d-iphone cocos2d-android

这是我试图让弹丸在点击枪(精灵)时做一些动作  但当触及精灵canon1“射弹”没有出来时,如果有人知道这有帮助我。

@Override
public boolean ccTouchesBegan(MotionEvent event)    
{  


    // Choose one of the touches to work with
//  CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));


    if(CGRect.containsPoint((canon2.getBoundingBox()), location)){

    // Set up initial location of projectile
    CGSize winSize = CCDirector.sharedDirector().displaySize();
    _nextProjectile = CCSprite.sprite("fireball50.png");
    System.out.println("projectile working");
    //_nextProjectile.setPosition(20, winSize.height / 2.0f);   
    _nextProjectile.setPosition(CGPoint.ccp(65, 120));   

    // Determine offset of location to projectile
    int offX = (int)(location.x - _nextProjectile.getPosition().x);
    int offY = (int)(location.y - _nextProjectile.getPosition().y);

    // Bail out if we are shooting down or backwards
    if (offX <= 0)      
        return true;

    _nextProjectile.setTag(3);

    // Determine where we wish to shoot the projectile to
    int realX = (int)(winSize.width + (_nextProjectile.getContentSize().width / 2.0f));
    float ratio = (float)offY / (float)offX;
    int realY = (int)((realX * ratio) + _nextProjectile.getPosition().y);
    CGPoint realDest = CGPoint.ccp(realX, realY);

    float velocity = 480.0f / 1.0f; // 480 pixels / 1 sec
    float realMoveDuration = length / velocity;


        // Move projectile to actual endpoint
    _nextProjectile.runAction(CCSequence.actions(
            CCMoveTo.action(realMoveDuration, realDest),
            CCCallFuncN.action(this, "spriteMoveFinished")));

}

1 个答案:

答案 0 :(得分:1)

首先使用

设置触控功能
     this.setIsTouchEnabled(true);

然后将您的功能更改为

 public boolean ccTouchesBegan(MotionEvent event)
 {
     CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));

    // Set up initial location of projectile
    CGSize winSize = CCDirector.sharedDirector().displaySize();
    _nextProjectile = CCSprite.sprite("fireball50.png");

    // _nextProjectile.setPosition(20, winSize.height / 2.0f);
    _nextProjectile.setPosition(CGPoint.ccp(65, 120));


    for (CCSprite target : targets)
        {

            if (CGRect.containsPoint((target.getBoundingBox()), location))
                {

                    // Determine offset of location to projectile
                    int offX = (int) (location.x - _nextProjectile.getPosition().x);
                    int offY = (int) (location.y - _nextProjectile.getPosition().y);

                    // Bail out if we are shooting down or backwards

                    _nextProjectile.setTag(3);   
                    // Determine where we wish to shoot the projectile
                    // to
                    int realX = (int) (winSize.width + (_nextProjectile.getContentSize().width / 2.0f));
                    float ratio = (float) offY / (float) offX;
                    int realY = (int) ((realX * ratio) + _nextProjectile.getPosition().y);
                    CGPoint realDest = CGPoint.ccp(realX, realY);

                    // Determine the length of how far we're shooting
                    int offRealX = (int) (realX - _nextProjectile.getPosition().x);
                    int offRealY = (int) (realY - _nextProjectile.getPosition().y);
                    float length = FloatMath.sqrt((offRealX * offRealX) + (offRealY * offRealY));
                    float velocity = 480.0f / 1.0f; // 480 pixels / 1
                                                    // sec
                    float realMoveDuration = length / velocity;
                    System.out.println(" - t tag!!!!!!!!!!!!!!!!!!!!! - ");
                    _nextProjectile.runAction(CCSequence.actions(CCMoveTo.action(realMoveDuration, realDest),
                            CCCallFuncN.action(this, "spriteMoveFinished")));
                    double angleRadians = Math.atan((double) offRealY / (double) offRealX);
                    double angleDegrees = Math.toDegrees(angleRadians);
                    double cocosAngle = -1 * angleDegrees;
                    double rotationSpeed = 0.5 / Math.PI;
                    double rotationDuration = Math.abs(angleRadians * rotationSpeed);

                    target.runAction(CCSequence.actions(
                            CCRotateTo.action((float) rotationDuration, (float) cocosAngle),
                            CCCallFunc.action(this, "finishShoot")));
                    break;
                }
        }


    return true;
}