Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3弹丸移动不正确_Actionscript 3 - Fatal编程技术网

Actionscript 3 AS3弹丸移动不正确

Actionscript 3 AS3弹丸移动不正确,actionscript-3,Actionscript 3,因此,我目前正试图为子弹地狱游戏制作一个原型,但我遇到了一个死胡同 到目前为止,我可以完美地移动我的球员,老板像他应该做的那样来回移动,但是射弹有一些有趣的动作。基本上,当老板向左/向右移动时,投射物也会像粘在他身上一样移动。他们在y方向上移动,就像他们应该做的那样,除了他们停在离玩家不远的地方,不再移动,所以我希望任何人都能看看我的代码,帮我看看发生了什么 注意:忽略旋转的内容,这是为了以后的实现,我只是在做基础工作 A.as 包 { 导入flash.display.Stage; 导入flas

因此,我目前正试图为子弹地狱游戏制作一个原型,但我遇到了一个死胡同

到目前为止,我可以完美地移动我的球员,老板像他应该做的那样来回移动,但是射弹有一些有趣的动作。基本上,当老板向左/向右移动时,投射物也会像粘在他身上一样移动。他们在y方向上移动,就像他们应该做的那样,除了他们停在离玩家不远的地方,不再移动,所以我希望任何人都能看看我的代码,帮我看看发生了什么

注意:忽略旋转的内容,这是为了以后的实现,我只是在做基础工作

A.as
包
{
导入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);