Finally, what I did was just make a method that used the Pythagorean theorem to make the missile move the same distance to the banana every time the missileMove selector was called.
I also made the missile rotate to the banana.
If anyone is interested, here is the code:
-(void) followingMissileMove{
missileDurationCount ++;
float rotationAngle = [self rotationAngleMissileRespectPosition:_player.position]; //calculate the rotation angle to the banana
rotationAngle -= 90;
float rotationFinalAngle = -1 * rotationAngle;
missile.position = [self advanceMissileToPoint:_player.position];
missile.rotation = rotationFinalAngle;
if (missileDurationCount > 500) //Stop the action
}
Here is the method that I used to calculate the new missile position every time the missileMove selector was called. Of course, the new position was closer to the banana.
-(CGPoint)advanceMissileToPoint: (CGPoint)positionToAdvance{
// Determinem el angle de la posició à respecte al missil
float pixelsToAdvance = missileVelocity;
CGPoint advanceMissileToPoint;
float anglePointRespectMissile;
float offY;
float offX;
if (missile.position.y < positionToAdvance.y) {
offY = positionToAdvance.y - missile.position.y;
offX = positionToAdvance.x - missile.position.x;
anglePointRespectMissile = CC_RADIANS_TO_DEGREES( atanf(offY/offX));
if (anglePointRespectMissile<0) anglePointRespectMissile = 180 + anglePointRespectMissile;
}
else if(missile.position.y > positionToAdvance.y){
offY = positionToAdvance.y - missile.position.y;
offX = positionToAdvance.x - missile.position.x;
anglePointRespectMissile = CC_RADIANS_TO_DEGREES( atanf(offY/offX));
if (anglePointRespectMissile < 0) {
anglePointRespectMissile = 360 + anglePointRespectMissile;
}
else {
anglePointRespectMissile = 180 + anglePointRespectMissile;
}
}
else if(missile.position.y == positionToAdvance.y){
if(positionToAdvance.x > missile.position.x){
advanceMissileToPoint.y =missile.position.y;
advanceMissileToPoint.x = missile.position.x+pixelsToAdvance;
}
else {
advanceMissileToPoint.y = missile.position.y;
advanceMissileToPoint.x = missile.position.x-pixelsToAdvance;
}
return advanceMissileToPoint;
}
//Depenent del quadrant avan?em els pixels
if (anglePointRespectMissile >= 0 && anglePointRespectMissile <= 90) {
advanceMissileToPoint.y = missile.position.y +((sinf(CC_DEGREES_TO_RADIANS(anglePointRespectMissile)))*pixelsToAdvance);
advanceMissileToPoint.x = missile.position.x +((cosf(CC_DEGREES_TO_RADIANS(anglePointRespectMissile)))*pixelsToAdvance);
}
else if (anglePointRespectMissile >= 90 && anglePointRespectMissile <= 180){
anglePointRespectMissile = 180 - anglePointRespectMissile;
advanceMissileToPoint.y = missile.position.y +((sinf(CC_DEGREES_TO_RADIANS(anglePointRespectMissile)))*pixelsToAdvance);
advanceMissileToPoint.x = missile.position.x -((cosf(CC_DEGREES_TO_RADIANS(anglePointRespectMissile)))*pixelsToAdvance);
}
else if(anglePointRespectMissile >= 180 && anglePointRespectMissile <= 270) {
anglePointRespectMissile -= 180;
advanceMissileToPoint.y = missile.position.y -((sinf(CC_DEGREES_TO_RADIANS(anglePointRespectMissile)))*pixelsToAdvance);
advanceMissileToPoint.x = missile.position.x -((cosf(CC_DEGREES_TO_RADIANS(anglePointRespectMissile)))*pixelsToAdvance);
}
else if(anglePointRespectMissile >= 270 && anglePointRespectMissile <= 360){
anglePointRespectMissile = 360 - anglePointRespectMissile;
advanceMissileToPoint.y = missile.position.y -((sinf(CC_DEGREES_TO_RADIANS(anglePointRespectMissile)))*pixelsToAdvance);
advanceMissileToPoint.x = missile.position.x +((cosf(CC_DEGREES_TO_RADIANS(anglePointRespectMissile)))*pixelsToAdvance);
}
return advanceMissileToPoint;
}