Actionscript 3 AS3弹丸移动不正确
因此,我目前正试图为子弹地狱游戏制作一个原型,但我遇到了一个死胡同 到目前为止,我可以完美地移动我的球员,老板像他应该做的那样来回移动,但是射弹有一些有趣的动作。基本上,当老板向左/向右移动时,投射物也会像粘在他身上一样移动。他们在y方向上移动,就像他们应该做的那样,除了他们停在离玩家不远的地方,不再移动,所以我希望任何人都能看看我的代码,帮我看看发生了什么 注意:忽略旋转的内容,这是为了以后的实现,我只是在做基础工作 A.asActionscript 3 AS3弹丸移动不正确,actionscript-3,Actionscript 3,因此,我目前正试图为子弹地狱游戏制作一个原型,但我遇到了一个死胡同 到目前为止,我可以完美地移动我的球员,老板像他应该做的那样来回移动,但是射弹有一些有趣的动作。基本上,当老板向左/向右移动时,投射物也会像粘在他身上一样移动。他们在y方向上移动,就像他们应该做的那样,除了他们停在离玩家不远的地方,不再移动,所以我希望任何人都能看看我的代码,帮我看看发生了什么 注意:忽略旋转的内容,这是为了以后的实现,我只是在做基础工作 A.as 包 { 导入flash.display.Stage; 导入flas
包
{
导入flash.display.Stage;
导入flash.display.MovieClip;
导入flash.events.Event;
公共级电影剪辑
{
私有var阶段f:阶段;
私有变量xVel:Number=0;
私有变量_yVel:Number=0;
专用var旋转弧度=0;
私人施工速度:编号=10;
公共功能射弹(stageRef:Stage,x:Number,y:Number,旋转度:Number)
{
this.stageRef=stageRef;
这个.x=x;
这个。y=y;
此旋转=旋转度;
this.rotationRadians=rotationDegrees*Math.PI/180;
}
公共函数更新():void
{
这个。y+=速度;;
如果(x>stageRef.stageWidth | | x<0 | | | y>stageRef.stageHeight | | y<0)
{
//这个。removeChild(这个);问题是你正在将你的投射物“添加”到你的老板面前,而不是舞台(或与你的老板相同的显示级别)。当你的老板移动时,你的投射物将相对于他移动(即,当他侧向移动时,它们也会移动)。
当您的上司发射投射物时,使用自定义事件触发作为上司显示父级的类中的FireProjection方法。在该类中实例化投射物,并将其添加到您将上司添加到的同一对象(可能是阶段?)中。
或者,如果不想使用自定义事件,请在当前的FireProjectle方法中将addChild行更改为:
this.parent.addChild(projectile);
这将向你老板的父对象添加投射物。虽然这一行对我来说有点像作弊。你似乎将投射物作为老板的子对象添加。因此它将随老板一起移动。它可能应该作为阶段的子对象添加。将其更改为stage.addChild(投射物)
使其仅在屏幕左侧(从0,0)发射,而我正在寻找的功能是从Boss的中心发射。我需要它做的是(因为我还没有从某个角度发射)一旦创建了一个,强制它保持在x位置,但继续沿着Y方向移动。使用this.parent.addChild(投射物);
的问题与我使用stage.addChild(投射物);
的问题相同,因为它现在保持从(0,0)发射而不是凸台的中心。关于如何使其从凸台的中心移动而不是与凸台一起移动,我正在画一张空白。@AndrewB您必须给出相对于其预期父对象的投射物坐标。对于仅一个父对象,在创建新项目时,将boss.x
和boss.y
添加到投射物的x和y平铺。应该这样做。是的,使用凸台坐标作为起始投射物坐标。投射物将使用凸台父对象的参考框架,因此它们需要定位以匹配凸台的位置。
package
{
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class Boss extends MovieClip
{
private var stageRef:Stage;
private var _vx:Number = 3;
private var _vy:Number = 3;
private var fireTimer:Timer;
private var canFire:Boolean = true;
private var projectile:Projectile;
public var projectileList:Array = [];
public function Boss(stageRef:Stage, X:int, Y:int)
{
this.stageRef = stageRef;
this.x = X;
this.y = Y;
fireTimer = new Timer(300, 1);
fireTimer.addEventListener(TimerEvent.TIMER, fireTimerHandler, false, 0, true);
}
public function update():void
{
this.x += _vx;
if(this.x <= 100 || this.x >= 700)
{
_vx *= -1;
}
fireProjectile();
projectile.update();
}
public function fireProjectile():void
{
if(canFire)
{
projectile = new Projectile(stageRef, this.x / 200 + this._vx, this.y, 90);
addChild(projectile);
canFire = false;
fireTimer.start();
}
}
private function fireTimerHandler(event:TimerEvent) : void
{
canFire = true;
}
}
}
this.parent.addChild(projectile);