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");
}
}