2012-06-22 3 views
0

Я делаю флеш-игру для своего курса в колледже, я слежу за учебником, но открутил его ради себя. Одна стена, которую я ударил, заключается в том, что когда я запускаю пулю, она стреляет только вправо, с небольшим движением вверх или вниз, я пытаюсь исправить ее какое-то время, но ничего не происходит, и ничего не работает.Пули стреляют только вправо?

пакет {

import flash.display.MovieClip; 
import flash.events.Event; 
import flash.events.MouseEvent; 

public class Wizard extends MovieClip { 

    private var dx:Number; 
    private var dy:Number; 
    private var Bulletspeed:int; 
    public var Angle:Number; 
    public var newAngle:Number; 
    var shotCoolDown:int; 
    const MAX_COOLDOWN=20; 
    public function Wizard() { 
     //constructor 
     //Shot cool down 
     shotCoolDown=MAX_COOLDOWN; 
     addEventListener(Event.ENTER_FRAME, update); 
     //set up an event listener for when the turret is added to stage 
     addEventListener(Event.ADDED_TO_STAGE, initialise); 




    } 
    function initialise(e:Event) { 
     //reduce shot cool down by one 
     shotCoolDown=shotCoolDown-1; 

     //add a click listener to the stage 
     stage.addEventListener(MouseEvent.CLICK, fire); 
    } 
    function fire(m:MouseEvent) { 
     //Able to shoot 
     if (shotCoolDown<=0) { 
      //resets cool down 
      shotCoolDown=MAX_COOLDOWN; 
      //spawn bullet 
      var B = new Bullet(); 
      //set position and rotation of the bullet 
      B.rotation=rotation; 
      B.x=x; 
      B.y=y; 
      //add the bullet the the wizard 
      parent.addChild(B); 
     } 
    } 

    function update():void { 
     //Shot cool down 
     shotCoolDown--; 
     //Make the Wizard face the mouse 
     if (parent!=null) { 
      dx=stage.mouseX-this.x; 
      dy=stage.mouseY-this.y; 
      Math.abs(dx); 
      Math.abs(dy); 
      var Angle=Math.atan2(dy,dx); 
      var newAngle = Angle * (180/Math.PI); 

      if ((0 < newAngle) && (newAngle <= 90)) { 
       gotoAndPlay("Right"); 
      } else if ((90 < newAngle) && (newAngle <= 180)) { 
       gotoAndPlay("Down"); 
      } else if ((-180 < newAngle) && (newAngle <= -90)) { 
       gotoAndPlay("Left"); 
      } else if ((-90 < newAngle) && (newAngle <= 0)) { 
       gotoAndPlay("Up"); 
      } 

      this.rotation=Angle; 

     } 
    } 
} 

}

Вот код для моего класса игрока, с такими вещами, как пули стрельбы, а что нет. Я думаю, что знаю проблему, мне нужно связать ее с остальной частью обновления Wizard. Но я не знаю, как, вот мой класс пули, если это необходимо.

пакет {

import flash.display.Sprite; 
import flash.events.Event; 

public class Bullet extends Sprite { 

    private var speed:int; 
    private var myCharacter:Wizard; 



    public function Bullet() { 
     //constructor 
     speed = 10; 
     addEventListener(Event.ENTER_FRAME, update); 


    } 



    function update (e:Event) { 
      //Move in the direction the bullet is facing 
     x=x+Math.cos(rotation/180*Math.PI)*speed; 
     y=y+Math.sin(rotation/180*Math.PI)*speed; 
     //Clears bullet once it leaves the stage 
     if (x<0 || x>500 || y<0 || y>500) { 
      //removes the update listner 
      removeEventListener(Event.ENTER_FRAME, update); 

      parent.removeChild(this); 




     } 
    } 
} 

}

+0

попробуйте заменить 'B.rotation = rotation;' на 'B.rotation = this.rotation;' Я уверен, что 'rotation' не определено, и именно поэтому он идет правильно (всегда установлен в 0) попробуйте использовать 'trace (rotation)', чтобы посмотреть, какая переменная находится во время выполнения. – Waltzy

+0

Я сделал это, но ничего, угол остается между 1 и -1 каждым выстрелом, где бы я ни двигался –

+0

Вращение - это не радия. попробуйте thisx = x + Math.cos (вращение) * скорость; и это y = y + Math.sin (вращение) * скорость; –

ответ

0

вы устанавливаете Wizard «s rotation к Angle, который находится в радианах; затем вращение передается на Bullet, который ожидает, что его вращение будет находиться в градусах. Вероятно, лучше установить this.rotation=newAngle; в конце update(), так как класс UIComponent ожидает этого значения в градусах и использует его для поворота чертежа.

Смежные вопросы