Actionscript 3 Can';在AS3中不移动类的对象

Actionscript 3 Can';在AS3中不移动类的对象,actionscript-3,flash,flash-builder,Actionscript 3,Flash,Flash Builder,我正在做一个游戏,我需要我的英雄来射击,但我不知道为什么子弹不动。他们出现在舞台上,但他们呆在他们出现的地方,一动不动。我找不到我的错误。谢谢 这是一个类,当我按下空格键时,它必须使项目符号出现并移动 public class Nivel_1 { public var mc:MainChar = new MainChar(); public var Ene:Enemigo = new Enemigo(); public var bullet:Bullet = new Bu

我正在做一个游戏,我需要我的英雄来射击,但我不知道为什么子弹不动。他们出现在舞台上,但他们呆在他们出现的地方,一动不动。我找不到我的错误。谢谢

这是一个类,当我按下空格键时,它必须使项目符号出现并移动

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 Nivel_1
{
公共变量mc:MainChar=newmainchar();
public-var-Ene:Enemigo=new-Enemigo();
public-var-bullet:bullet=new-bullet();
public var Back:MC_Nivel_1=新MC_Nivel_1()
公共变量Spawn_Boss:Boolean=false;
公共var boss:boss=新boss();
公共静态向量:向量。=新向量。();
公共变量disparo:Boolean=false;
公共职能Nivel_1()
{   
}
公共函数Iniciar():void
{
Main.escnario.addEventListener(Event.ENTER\u FRAME,Update);
Main.escnario.addChild(后面);
初始值(600630);
mc.Init(100150);
Main.escnario.addEventListener(KeyboardEvent.KEY_UP,OnKeyUpLv1);
Main.escnario.addEventListener(KeyboardEvent.KEY_DOWN,OnKeyDownLv1);
跟踪(“开始”);
}
公共函数更新(e:Event=null):无效
{
updateBala();
mc.Update();
Coliciones();
如果(生成老板)
{
boss.Update();
}
}
公用函数OnKeyUpLv1(e:键盘事件):无效
{
开关(如钥匙代码)
{
case KEYBORD.SPACE:
disparo=true;
if(disparo==true)
{
var bala:Bullet=新Bullet();
(mc.grafica.x,mc.grafica.y-mc.grafica.height/2,mc.grafica.scaleX);
}
打破
}
}
公用函数OnKeyDownLv1(e:键盘事件):无效
{
开关(如钥匙代码)
{
case KEYBORD.SPACE:
disparo=false;
打破
}
}
公用函数Coliciones():void
{
对于(变量i:int=0;i
你乘以你的速度*方向,15*0=0,这就是为什么它不移动的原因

我想说你的
子弹
永远不应该知道
Main
游戏
,所有的拼接,
addChild()
和移动/销毁触发器都应该位于
游戏
,甚至不在
Nivel
类实例中。您应该根据什么移动什么重新设计代码。子弹可以很容易地移动,如果他们改变
this.x
this.y
内部,在所有子弹移动后,碰撞检测阶段可以开始,这是
游戏的工作,它应该了解子弹、玩家和敌人。子弹应该不知道它们要去哪里,除非它们有一个
目标
——你调用
子弹[i].move()
,就这样。
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");
    }   
}