获取错误1119:通过具有静态类型Class的引用访问可能未定义的属性

时间:2016-01-12 20:04:35

标签: actionscript-3 flash-cs5

我想在动画加载后立即隐藏符号(格栅图像)。 目前我收到错误,E:\ Burger Game \ DragandDrop \ Dragable.as,第4行,第8列1119:通过带有静态类型Class的引用可访问可能未定义的属性。你可能会说,我是flash的新手。

package DragandDrop
{
    Grill.visible=false;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.geom.Point;

    public class Dragable extends MovieClip
    {

        protected var homePos:Point;
        var totalToBowl:int =3;
        var i:int = 0;
        public function Dragable ()
        {                   
            homePos=new Point( x, y);
            buttonMode =true;
            addEventListener ( MouseEvent.MOUSE_DOWN, move);
        }

        //egg functions
        protected function move(event:MouseEvent) :void
        {           
            parent.addChild(this);
            startDrag();
            stage.addEventListener(MouseEvent.MOUSE_UP, stageUp)            
        }

        //item drop function

        protected function stageUp(event:MouseEvent):void
                {

                stopDrag();
                if (event.target.dropTarget != null &&dropTarget.parent.name == "Bowl")
                {
                    scaleX=scaleY=0;
                    alpha=0.5;
                    y= stage.stageHeight-height -700;
                    x=stage.stageWidth-width- 1400;
                    buttonMode=false;
                    removeEventListener(MouseEvent.MOUSE_DOWN, stageUp)
                    i++

            }if (i == totalToBowl){

            i=10
            trace(i);
            event.target.dropTarget.visible = false;


        }
        if (i==10 )
        {
            dropTarget.parent.visible = false;  
                }else{
                    returnToHome();

                }
    }

        protected function returnToHome():void
        {
            x = homePos.x;
            y= homePos.y;
        }

}

我知道为什么会收到此错误?

任何帮助都会受到大力赞赏。 非常感谢,

罗布

1 个答案:

答案 0 :(得分:1)

有两个问题:

  1. Grill是一个类,但似乎你试图像实例一样使用它。这就像你正在使用时所期望的那样:

    public class Grill extends MovieClip {
        public static var visible:Boolean;
    }
    

    但更有可能的是,您需要做的是使用实例,而不是类本身:

    var g:Grill = new Grill();
    g.visible = false;
    

    如果此类链接到时间轴实例,则必须使用您提供的实例名称(并确保实例名称不与任何类名称冲突 - 或使用getChildByName)。

  2. 假设这不是静态代码,则在函数/方法之外的代码会导致另一个错误。

    在类文件中,所有非静态功能代码都需要在函数中。您需要将有问题的行(Grill.visible = false)移动到函数中。最有可能的是,您希望这相当于时间轴代码。因此,放置的最佳位置是:

    public function Dragable ()
    {                   
        homePos=new Point( x, y);
        buttonMode =true;
        addEventListener ( MouseEvent.MOUSE_DOWN, move);
    
        //addedToStage is the best equivalent of when timeline code would run
        addEventListener(Event.ADDED_TO_STAGE, addedToStage);
    }
    
    private function addedToStage(e:Event):void {
         //where grillinstance is the instance name of your grill
         grillInstance.visible = false;
    }
    
  3. 现在,假设您在时间轴上链接了此类,其上有一个Grill实例。如果这是一个不正确的假设,请通过评论澄清或更新您的问题。