Ваш код - небольшой беспорядок, подумайте об этом на секунду:
Когда определяется траектория полета пули?Прямо сейчас ваша пуля действует как управляемая ракета с нарушенным кодом наведения (без обид:)).
В частности, ваша пуля попадает в y + из-за этой строки кода:
y+ = вы;
, как вы можете видеть, он всегда выполняется внутри цикла, даже если x + = 5 или -5 не ...
vy и некоторая переменная vx, которой у вас сейчас нет, должны быть инициализированыв начале жизни пули, то есть, вероятно, где-то в конструкторе пуль
package {
public class Bullet extends MovieClip{
public var vx:Number;
public var vy:Number;
public var target:MovieClip;
public function Bullet(target:MovieClip, startX:Number, startY:Number){
/*this is a slightly bad idea to let the bullet have any knowledge of
the target but for purposes of this explanation lets do it like that.
This should better be put where the bullet was created but for now...*/
this.target = target;
x = startX;
y = startY;
/*this is slightly better code then your loop and it is only set once
instead of all the time*/
if(target.x < x-20){
vx = -5;
}else if(target.x > x+20){
vx = +5;
} else {vx = 0;}
if(target.y < y-20){
vy = -5;
}else if(target.y > y+20){
vy = +5;
} else {vy = 0;}
//now we create the loop itself
addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event) : void{
x+=vx;
y+=vy;
/*this is collision code, bear in mind this should probably also be
in an enter frame in the class that created the bullet and the target
the bullet simply should not know about the target but alas, long story...*/
if(checkCollision(target)){
//do something
}
}
/* notice that this function can be used outside of this class as well...
this is why i programmed it like this instead of just using the
this.hitTest if*/
public function checkCollision(target):Boolean{
if(this.hitTest(target)){
return true;
}
return false;
}
}
}
Надеюсь, я не допустил ошибок в этом коде ...
Кроме того, мне кажется,Вы только хотите, чтобы пуля шла по диагонали в нижний левый или нижний правый угол ... в этом случае, пожалуйста, измените конструктор так, чтобы он просто имел что-то вроде vy = 5;вместо всего этого:
if(target.y < y-20){
vy = -5;
}else if(target.y > y+20){
vy = +5;
} else {vy = 0;}
Надеюсь, это поможет вам.