2012-01-31 58 views
2

这里的漂亮的新flixel/AS3用户,虽然不是编码的全新。无论如何,这个错误很简单,但不是解决方案。 “AS3/Flixel:“访问可能未定义的属性。”

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

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

我已经遍及整个网络和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

回答

1
for each (var scrap:FlxSprite in this) 

您确定“this”中的每个属性都是FlxSprite的实例吗?也许你需要在ScrapManager中存储一个FlxSprites集合,然后循环这些集合呢?

我建议在这些循环中追踪“废料”,以确保它是正确的数据类型。如果是,并且它仍然在发布这些错误,那么应该能够将其缩小到可以解决问题的特定对象。

+0

噢,我完全忘了,但是我改变了Scrap为FlxExtendedSprite。我想这可能会搞砸了吧?现在无法访问我的代码,但希望能解决它。感谢您的提示,不能相信我已经忘记了这一点。< – 2012-01-31 15:05:42

+0

完成后一定要标记正确的答案。欢迎来到堆栈溢出! – 2012-01-31 18:23:05

+0

AHAH!你的回答比我想象的更接近。我在ScrapManager中也有这样的一行: 'var scrap:Scrap = Scrap(getFirstAvailable());' 我想这意味着我无法访问Scrap内部的变量,因为我在看FlxSprite(他们没有'是否存在),对吗?非常感谢你!它还没有工作,但那是因为我的数学,这一切都没有错误! – 2012-01-31 23:53:10

1

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

+0

不幸的是,“静态”并不像Scrap,ScrapManager,FlxSprite或FlxExtendedSprite中提到的那样。不过谢谢你。 – 2012-01-31 23:31:03