I know I’m not even close. I’m no mathematician. I just can’t figure out how to adjust the power and arc of the arrow to hit the target every time. Any help would be much appreciated. I’m still new to programming so don’t make fun of me. :cantlook:
My test code on the timeline:
function shoot(e:MouseEvent):void
{
var distx:Number = enemy.x - tower.x;
var arc:Number = distx;
var disty:Number = (enemy.y - arc) - tower.y;
var angle:Number = Math.atan2(disty, distx);
var power:Number = distx/25;
var vy:Number=Math.sin(angle)*power;
var vx:Number=Math.cos(angle)*power;
var arr:Arrow = new Arrow(vx,vy,enemy);
arr.x = tower.x;
arr.y = tower.y;
addChild(arr);
}
Arrow Class:
package {
import flash.display.*;
import flash.events.*;
public class Arrow extends Sprite
{
private var gravity:Number = .5;
private var ux:Number;
private var uy:Number;
private var targetMC:MovieClip;
public function Arrow(vx:Number, vy:Number, targetMC:MovieClip)
{
this.targetMC = targetMC;
ux = vx;
uy = vy;
addEventListener(Event.ENTER_FRAME, enter_frame);
}
private function enter_frame(e:Event):void
{
var sx:Number = ux; //distance moved in x dir
var vy:Number = uy + gravity //new velocity in y dir
var sy:Number = uy + gravity/2 //distance moved in y dir
this.x += sx;
this.y += sy;
uy = vy;
this.rotation = Math.atan2(uy, ux)*180/Math.PI;
if(this.y + this.height/2 >= targetMC.y)
{
removeEventListener(Event.ENTER_FRAME, enter_frame);
}
}
}
}