2015-06-03 17 views
0

我正在製作一款需要我的英雄開槍的遊戲,但我不明白爲什麼子彈不移動。他們出現在舞臺上,但他們留在他們出現的地方,不動。我找不到我的錯誤。謝謝!!無法移動AS3中的課堂對象

所以這是我按下空格時必須出現並移動子彈的類。

public class Nivel_1 
{ 
    public var mc:MainChar = new MainChar(); 
    public var Ene:Enemigo = new Enemigo(); 
    public var bullet:Bullet = new Bullet(); 

    public var Back:MC_Nivel_1 = new MC_Nivel_1() 

    public var Spawn_Boss:Boolean =false; 
    public var boss:Boss = new Boss(); 

    public static var balaVector:Vector.<Bullet> = new Vector.<Bullet>(); 

    public var disparo:Boolean = false; 


    public function Nivel_1() 
    { 
    } 

    public function Iniciar():void 
    { 
     Main.escenario.addEventListener(Event.ENTER_FRAME, Update); 
     Main.escenario.addChild(Back); 
     Ene.Init(600,630); 
     mc.Init(100,150); 

     Main.escenario.addEventListener(KeyboardEvent.KEY_UP, OnKeyUpLv1); 
     Main.escenario.addEventListener(KeyboardEvent.KEY_DOWN, OnKeyDownLv1); 

     trace ("start"); 
    } 

    public function Update(e:Event = null):void 
    { 
     updateBala(); 
     mc.Update(); 
     Coliciones(); 

     if(Spawn_Boss) 
     { 
      boss.Update(); 
     } 
    } 

    public function OnKeyUpLv1(e:KeyboardEvent):void 
    { 
     switch (e.keyCode) 
     { 
      case Keyboard.SPACE: 
       disparo = true; 
       if (disparo == true) 
       { 
        var bala:Bullet = new Bullet(); 
        bala.inicializar(mc.grafica.x, mc.grafica.y - mc.grafica.height/2 , mc.grafica.scaleX); 
       } 
       break; 
     } 
    } 

    public function OnKeyDownLv1(e:KeyboardEvent):void 
    { 
     switch (e.keyCode) 
     { 
      case Keyboard.SPACE: 
       disparo = false; 
       break; 
     } 
    } 

    public function Coliciones():void 
    { 
     for(var i:int = 0; i < balaVector.length ;i++) 
     {    
      if(balaVector[i].grafica_1.hitTestObject(Ene.grafica)) 
      { 
       Ene.Destroy(); 
       balaVector[i].Destruir(); 
       boss.Init(600,650); 
       Spawn_Boss = true; 
       break; 
      } 

      if(balaVector[i].grafica_1.hitTestObject(boss.grafica)) 
      { 
       boss.Destroy(); 
       balaVector[i].Destruir(); 
       break; 
      } 
     } 

     if(mc.grafica.hitTestObject(Ene.grafica)) 
      { 
       mc.grafica.x = mc.grafica.x - 3; 
       mc.vida --; 
      } 

     if(mc.grafica.hitTestObject(boss.grafica)) 
      { 
       mc.vida -5; 
      } 
    } 

    public function updateBala():void 
    { 
     for(var i:int=0;i<balaVector.length;i++) 
     { 
      balaVector[i].BulletUpdate(); 
     } 
    } 

    public function EndGame():void 
    { 
     mc.Destroy(); 
     Main.escenario.removeEventListener(Event.ENTER_FRAME,Update); 
    } 
} 

這是子彈類。

public class Bullet 
{ 
    public var grafica_1:MC_Bala_1; 
    public var velocidad_1:int = 15; 
    public var damage_1:int = 1; 
    public var direccion:int = 0; 

    public function Bullet() 
    { 
    } 

    public function BulletUpdate():void 
    { 
     Mover(); 
    } 

    public function inicializar(posX:int , posY:int , dir:int):void 
    { 
     grafica_1 = new MC_Bala_1(); 
     grafica_1.x = posX; 
     grafica_1.y = posY; 
     this.direccion = dir; 
     Game.balaVector.push(this); 
     Main.escenario.addChild(grafica_1); 

     trace ("bala"); 
    } 

    public function Mover():void 
    { 
     grafica_1.x += velocidad_1 * direccion; 

     if (grafica_1.x < 0 || grafica_1.x > Main.escenario.stageWidth) 
     { 
      Destruir(); 
     } 
    } 

    public function Destruir():void 
    { 
     if (Main.escenario.contains(grafica_1)) Main.escenario.removeChild(grafica_1); 
     Game.balaVector.splice(Game.balaVector.indexOf(this),1); 

     trace ("destruir bala"); 
    } 
} 
+1

我說你'Bullet'不應該知道'Main'或'Game',和所有拼接,addChild()和move/destroy觸發器都應該位於Game中 - 即使在Nivel類實例中也是如此。你應該根據什麼動作來重新設計你的代碼。子彈可以很容易地移動,如果他們自己內部改變this.x和this.y後,所有子彈移動,碰撞檢測階段可以開始,這是'遊戲'的工作,它應該知道子彈,玩家和敵人。子彈不應該知道他們要去哪裏,除非他們有一個「目標」 - 你稱之爲「子彈[i] .move()」,就這些。 – Vesper

回答

0

你乘以你的速度*方向,15 * 0 = 0,這就是爲什麼它不動