# rotate sprite and shooting bullets from the end of a cannon [duplicate]

Possible Duplicate:
How to Align Gun with Bullets

Hi all i have a problem in my Andengine code,

I need , when I touch the screen, shoot a bullet from the cannon (in the same direction of the cannon) The cannon rotates perfectly but when I touch the screen the bullet is not created at the end of the turret

This is my code:

``````private void shootProjectile(final float pX, final float pY){
int offX = (int) (pX-canon.getSceneCenterCoordinates()[0]);
int offY = (int) (pY-canon.getSceneCenterCoordinates()[1]);
if (offX <= 0)
return ;
if(offY>=0)
return;

double X=canon.getX()+canon.getWidth()*0,5;
double Y=canon.getY()+canon.getHeight()*0,5 ;
final Sprite projectile;
projectile = new Sprite( (float) X, (float) Y,
mProjectileTextureRegion,this.getVertexBufferObjectManager() );

mMainScene.attachChild(projectile);

int realX = (int) (mCamera.getWidth()+ projectile.getWidth()/2.0f);
float ratio = (float) offY / (float) offX;
int realY = (int) ((realX*ratio) + projectile.getY());

int offRealX = (int) (realX- projectile.getX());
int offRealY = (int) (realY- projectile.getY());
float length = (float) Math.sqrt((offRealX*offRealX)+(offRealY*offRealY));
float velocity = (float) 480.0f/1.0f;
float realMoveDuration = length/velocity;

MoveModifier modifier = new MoveModifier(realMoveDuration,projectile.getX(), realX, projectile.getY(), realY);
projectile.registerEntityModifier(modifier);
}

@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {

if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_MOVE){

double  dx = pSceneTouchEvent.getX() -  canon.getSceneCenterCoordinates()[0];
double  dy = pSceneTouchEvent.getY() -  canon.getSceneCenterCoordinates()[1];

double  Radius = Math.atan2(dy,dx);
double Angle = Radius * 180 / Math.PI;
canon.setRotation((float)Angle);

return  true;

}
else if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN){

final float touchX = pSceneTouchEvent.getX();
final float touchY = pSceneTouchEvent.getY();

double  dx = pSceneTouchEvent.getX() -  canon.getSceneCenterCoordinates()[0];
double  dy = pSceneTouchEvent.getY() -  canon.getSceneCenterCoordinates()[1];

double  Radius = Math.atan2(dy,dx);
double Angle = Radius * 180 / Math.PI;

canon.setRotation((float)Angle);
shootProjectile(touchX, touchY);
}

return false;
}
``````

Anyone know how to calculate the coordinates (X,Y) of the end of the barrel to draw the bullet?

-

## marked as duplicate by Byte56♦, John McDonald, 21st Century Moose, bummzack, doppelgreenerOct 7 '12 at 1:32

If the base (point of rotation) of the cannon is `(CannonBaseX, CannonBaseY)`, and the length of the cannon barrel is `Radius`, then:
``````BulletX = CannonBaseX + Radius * Cos(Angle);