0

Here is what i tried for projectile to do some action when clicked on gun(sprite) but when touched on the sprite canon1 "projectiles" are not coming out, please if anybody knows this help me.

@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")));

}

DD.
  • 973
  • 2
  • 10
  • 32
  • where did you find such declaration of `ccTouchesBegan` method? usually it returns nothing (`void`) and gets set of touches and event as params. make sure that you overloaded needed method. – Morion Jul 01 '13 at 10:35
  • it worked fine before giving this line, if(CGRect.containsPoint((canon2.getBoundingBox()), location)), when touched on any part of the screen projectile fired out, but after giving above line nothing worked out @Morion – DD. Jul 01 '13 at 10:58
  • what part is not working in your code? Is the log being printed? And how are you getting your touch location? – Parvaz Bhaskar Jul 01 '13 at 11:40

1 Answers1

1

first you to set touch to be enable using

     this.setIsTouchEnabled(true);

then change your function to

 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;
}
Villan
  • 730
  • 1
  • 8
  • 26