【问题标题】:AS3/Flixel: "Access of possibly undefined property."AS3/Flixel:“访问可能未定义的属性。”
【发布时间】:2012-02-22 21:47:35
【问题描述】:

这里有相当新的 flixel/AS3 用户,虽然对编码并不完全陌生。无论如何,错误的原因很简单,但不是解决方案。

“错误:通过静态类型 org.flixel:FlxSprite 的引用访问可能未定义的属性。”

它被抛出 6 次,两次使用属性 scrap.selected 和四次使用 scrap.distanceToMouse - 我已经用 cmets 标记了每条抛出错误的行。

我专门搜索了整个网络和 StackOverflow。这看起来是一个很常见的问题,但我无法针对我的具体情况应用任何解决方案。无论如何,这是相关的代码......

ScrapManager.as

    if (FlxG.mouse.pressed)
    {
        var ClosestDistance:int = 500; 
        for each (var scrap:FlxSprite in this)
        {
            scrap.selected = false; //error here!~ 
            var dx:int = scrap.x - FlxG.mouse.screenX;
            var dy:int = scrap.y - FlxG.mouse.screenY;
            scrap.distanceToMouse = (dx * dx) + (dy * dy); //error here!~

            if (scrap.distanceToMouse < ClosestDistance) //error here!~
            {
                ClosestDistance = scrap.distanceToMouse; //error here!~
            }
        }
        for each (var scrap:FlxSprite in this) 
        {
            if (scrap.distanceToMouse == ClosestDistance) //error here!~
            {
                scrap.selected = true; //error here!~
            }
        }
    }

Scrap.as

package 
{
    //import stuff...

    public class Scrap extends FlxExtendedSprite
        {
            public var selected:Boolean = false; 
            public var distanceToMouse:int; 
            //and more stuff...

我认为(希望)这就是解决此问题所需的全部内容,但如果需要,我很乐意提供更多。谢谢阅读。 :D

【问题讨论】:

    标签: actionscript-3 flixel


    【解决方案1】:
    for each (var scrap:FlxSprite in this)
    

    您确定“this”中的每个属性都是 FlxSprite 的实例吗?也许您需要在 ScrapManager 中存储 FlxSprite 的集合并循环遍历它们?

    我建议在这些循环中找出“废品”以确保它是正确的数据类型。如果是,并且它仍然给出这些错误,您应该能够将其缩小到给您带来问题的特定对象。

    【讨论】:

    • 哦,我完全忘记了,但我把 Scrap 改成了 FlxExtendedSprite。我想这可能会把事情搞砸吧?现在无法访问我的代码,但希望可以解决它。感谢您的提示,不敢相信我忘记了>.
    • 完成后请务必标记正确答案。欢迎使用 Stack Overflow!
    • 啊啊!你的回答比我想象的还要接近。我在 ScrapManager 中也有这一行:var scrap:Scrap = Scrap(getFirstAvailable()); 我想这意味着我无法访问 Scrap 中的变量,因为我正在查看 FlxSprite(它们不存在的地方),对吧?非常感谢!它还没有工作,但那是因为我的数学,这一切都没有错误!
    • 哦,最后一个错误,对于后面的任何人;我写了if (FlxG.mouse.pressed),而我应该写if (FlxG.mouse.pressed())
    • 詹姆斯,对不起,如果我向您发送垃圾邮件,但我想向其他检查此问题的人说明我的解决方案。事实证明,除了上述所有内容之外,代码还必须阅读 this.members,而不仅仅是 this。事后看来,这很明显。现在我可以说它终于工作了。再次感谢大家的帮助!
    【解决方案2】:

    我的猜测是 (a) 您将 FlxSprite 更改为静态,或者 (b) 您的 Scrap 类是静态的。

    【讨论】:

    • 不幸的是,“静态”并没有 Scrap、ScrapManager、FlxSprite 或 FlxExtendedSprite 中提到的那么多。不过还是谢谢。
    猜你喜欢
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2014-06-29
    • 2021-08-17
    • 2016-09-04
    • 2015-01-13
    相关资源
    最近更新 更多