无法识别数组中的 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 newBatnewBat 变量是在函数内部本地创建的,因此它仅在那里可见。 据我了解第一个问题——你新添加的蝙蝠需要在之前添加的之后:

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 中删除子级

如何从 Actionscript 3.0 中的数组 B 中的数组 A 中删除元素?

Actionscript 3 在数组中搜索字符串

如何解析Actionscript 3中的json对象?

如何在 Actionscript 3.0 中获取数组的所有排列?

如何在Actionscript 3.0中获取数组的所有排列?