【问题标题】:AS3: How to refer an object by his propertiesAS3:如何通过他的属性来引用一个对象
【发布时间】:2011-10-15 20:13:54
【问题描述】:

好吧,我正在做一个跳棋游戏,我需要通过它的位置(x 和 y,两者)来引用一个棋子并将其从屏幕上移除(这没问题)。

我一直在盘点“this”的组合。但什么都没有。 你会怎么做?

【问题讨论】:

    标签: actionscript-3 object properties refer


    【解决方案1】:

    this.x 和 this.y 在你的棋盘对象范围内是有效的;但是,如果您要访问其范围之外的片段,则必须使用片段的实例名称。虽然不是最佳的,但您可以循环遍历子 DisplayObject。

    // create a collection of your checker pieces
    var checkers:Array = [];
    
    // create a checker piece, whatever your DisplayObject class is.
    var checker:Checker;
    checkers.push(checker);
    
    // add it to the stage, probably your game board
    addChild(checker);    
    checker.x = 100;
    checker.y = 100;
    
    // loop through the children (from your game board)
    for (var i:uint = 0; i < numChildren; i++)
    {
        var checker:DisplayObject = getChildAt(i);
        trace(checker.x);
        trace(checker.y);
    }
    

    使用坐标来参考棋子可能不是游戏的最佳选择。您可能需要考虑行/列或从游戏板的工作方式来处理它。

    如果不清楚,您应该指定一些代码或更详细地扩展您的问题。

    【讨论】:

    • 所有检查器都来自 Checker 类(从 MovieClip 扩展),而 checker.side 是一种可以是“白色”或“黑色”的属性。当它们位于屏幕上时,会创建一个数组来存储它们的相对位置。因此,检查器也有 _row(从 0 到 7)和 _column(也从 0 到 7),并且每次移动后都会更新数组,以计算移动是否可能。但是检查器不在数组中,我应该按照您在示例代码中所做的那样通过 _row 和 _column 找到它们吗?
    • 我按照您的示例进行了操作,它起作用了,我所需要的只是将所有检查器添加到数组中,并添加魔术线“var checker:DisplayObject = getChildAt(0);”逐一验证检查器是否具有该属性并将其删除。我修改了示例的 las 部分以进行尝试:function removeChecker (event:TimerEvent){ for(var i:uint = 0; i&lt;checkers.length; i++){&lt;br/&gt; var checker:DisplayObject = getChildAt(i);&lt;br/&gt; if (checker.x==200 &amp;&amp; checker.y==200){&lt;br/&gt; removeChild(checker);&lt;br/&gt; }&lt;br/&gt; }&lt;br/&gt; }
      非常感谢。
    • 是的,对不起,我有 getChildAt(0) - 你完全正确。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    相关资源
    最近更新 更多