我是动作脚本的新手,我还在努力弄清楚数组和类。我正在制作一款类似于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类中定义的,所以我不确定我做错了什么。有任何想法吗?就像我之前所说的那样,我对此非常陌生并且几乎是自学,所以我可能会做一些完全错误的事情。谢谢!
答案 0 :(得分:0)
PlayScreen.newBat
表示尝试访问public static var newBat
课程中的PlayScreen
。 newBat
变量在函数内部本地创建,因此仅在那里可见。
据我所知,第一个问题 - 你新添加的蝙蝠需要落后于之前添加的蝙蝠:
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