无法识别数组中的 Actionscript 3 子项
Posted
技术标签:
【中文标题】无法识别数组中的 Actionscript 3 子项【英文标题】:Actionscript 3 child from array not recognized 【发布时间】:2016-11-16 18:26:27 【问题描述】:我对 actionscript 很陌生,我仍在尝试找出数组和类。我正在制作一个类似于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);
蝙蝠的所有动作都在另一个名为蝙蝠的类中。
我有两个问题:
问题 #1:靠近的球棒仍会落后于更远的球棒。
问题 #2:我将 setChildIndex(PlayScreen.newBat, 0)
添加到 Bat 类的构造函数代码中,当蝙蝠靠近时添加 setChildIndex(PlayScreen.newBat, 1)
,但我得到“通过静态类型 Class 的引用访问可能未定义的属性 newBat”。
似乎 newBat 是在 PlayScreen 类中定义的,所以我不确定我做错了什么。有任何想法吗?就像我之前说的那样,我对此很陌生,而且几乎是自学成才的,所以我可能会做一些完全错误的事情。谢谢!
【问题讨论】:
【参考方案1】:PlayScreen.newBat
表示尝试访问 PlayScreen
类中的 public static var newBat
。 newBat
变量是在函数内部本地创建的,因此它仅在那里可见。
据我了解第一个问题——你新添加的蝙蝠需要在之前添加的之后:
addChild (newBat);
setChildIndex(newBat, 0);
在addBat
函数中应该有帮助。
当蝙蝠靠近时(这似乎在Bat
类中处理),如果您只需将其添加到顶部深度:
if(parent)//I prefer checking it - just in case
parent.setChildIndex(this, parent.numChildren - 1);
另一种方法是在PlayerScreen
中为每个球棒距离创建一个子层Sprite
,并在接近时将每个球棒添加到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);
并且PlayerScreen
的每个public
成员都可以从Bat
获得,例如e。 G。 _screen.background
【讨论】:
太棒了,这对最近的距离有效!我也有中距离和远距离,这是一个问题。当我为 Mid distance 执行 parent.setChildIndex(this, 1) 时,我得到 #2006:out of bounds 错误。此外,每当我在 Bat 类中告诉某些内容以影响 Playscreen 类中的某些内容时,我都会收到一条错误消息,指出无法识别该变量,因此我无法让 Sprite 的想法发挥作用。就这一点而言,我觉得我错过了一些非常基本的东西。非常感谢您迄今为止的帮助! 那个更新做到了!!!我在 PlayScreen 中创建了 4 个名为 Layer01、Layer02、Layer03 和 Layer04 的影片剪辑。然后我在构造函数中将背景添加到 Layer01。新的蝙蝠被添加到第 02 层。当它到达移动序列中让蝙蝠靠近的部分时,我在 Bat 类中输入:'parent.removeChild(this)',然后是'_screen.Layer03.addChild(这 )'。当它更接近时,我放了'parent.removeChild(this)'然后'_screen.Layer04.addChild(this)'。工作就像一个魅力,非常感谢!以上是关于无法识别数组中的 Actionscript 3 子项的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Actionscript 3.0 中的数组 B 中的数组 A 中删除元素?