无法识别数组中的Actionscript 3子项

时间:2016-07-14 01:08:01

标签: arrays actionscript-3 flash

我是动作脚本的新手,我还在努力弄清楚数组和类。我正在制作一款类似于Shinobi的奖金回合的游戏,但是我正在使用飞入舞台的蝙蝠,垂直飞出舞台,然后重新回到舞台。以下是将蝙蝠添加到场景的代码:

package  {
import flash.display.MovieClip;
import flashx.textLayout.formats.BackgroundColor;
import flash.utils.Timer;
import flash.events.Event;
import flash.events.TimerEvent;

public class PlayScreen extends MovieClip
{
    public var background:Background;
    public var batArmy:Array;
    public var addBatTimer:Timer;

    public function PlayScreen() 
    {
        background = new Background
        background.x = 0;
        background.y = 0;
        addChild( background );
        batArmy = new Array();
        var newBat = new Bat( 480, -50);
        batArmy.push (newBat);
        addChild (newBat);
        addBatTimer = new Timer(7000,2)
        addBatTimer.addEventListener(TimerEvent.TIMER, addBat);
        addBatTimer.start();
    }
    public function addBat( e:Event ):void
    {
        var newBat = new Bat( 480, -50);
        batArmy.push ( newBat )
        addChild (newBat);
    }
}

所有蝙蝠的动作都在另一个名为Bat的类中。

我遇到两个问题:

问题#1:近距离的球棒仍然会在更远的球棒后面。

问题#2:我将setChildIndex(PlayScreen.newBat, 0)添加到类Bat的构造函数代码和setChildIndex(PlayScreen.newBat, 1)当bat接近但我得到“通过静态类型的引用访问可能未定义的属性newBat类。”

似乎newBat是在PlayScreen类中定义的,所以我不确定我做错了什么。有任何想法吗?就像我之前所说的那样,我对此非常陌生并且几乎是自学,所以我可能会做一些完全错误的事情。谢谢!

1 个答案:

答案 0 :(得分:0)

PlayScreen.newBat表示尝试访问public static var newBat课程中的PlayScreennewBat变量在函数内部本地创建,因此仅在那里可见。

据我所知,第一个问题 - 你新添加的蝙蝠需要落后于之前添加的蝙蝠:

addChild (newBat);
setChildIndex(newBat, 0);
addBat功能中的

应该有所帮助。

当蝙蝠靠近时(似乎在Bat类内部处理)如果你只需要将它添加到最顶层:

if(parent){//I prefer checking it - just in case
    parent.setChildIndex(this, parent.numChildren - 1);
}

另一种方法是在Sprite中为每个球棒距离创建一个子图层PlayerScreen,并将每个球棒添加到Sprite,因为它靠近。

更新
要使PlayScreen实例对Bat可见,您需要在那里传递引用。最简单的方法之一是向Bat构造函数添加一个参数,如下所示:
Bat课程:

private var _screen: PlayerScreen;
public function Bat(xVal:int, yVal:int, screen:PlayerScreen){
    //...
    _screen = screen;
} 

PlayerScreen上课:

var newBat = new Bat( 480, -50, this);

public的每个PlayerScreen成员都可以从Bat获得,例如e。 G。 _screen.background