0

something is wrong with my encapsulation, but i dont know what it is:

I got a document class named Main bound to the stage:

package  {

import flash.display.MovieClip;

  public class Main extends MovieClip
  {
    var chapter1:Chapter1;

    public function Main() {
        // constructor code
        chapter1 = new Chapter1;
        addChild(chapter1);
    }   
  }
}

a Chapter1 class bound to a MovieClip:

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;

 public class Chapter1 extends MovieClip {

    public var numberOfFrames:uint;

    public function Chapter1() 
    {
        numberOfFrames = 3;

        //constructor
        trace("Chapter 1 constructed");
        Transition.moveFromTo();

    }

    public static function get getNumberOfFrames():uint
    {
        return numberOfFrames;
    }

 }
}

and a class called Transition that i like to use as a simple utility:

package  {

 public class Transition {

    public var gotNumber:uint;

    public function Transition() {
        trace(Chapter1.getNumberOfFrames);
    }

    static public function moveFromTo()
    {
        /* in the end id like to use this as a utility working with 
                     NumberOfFrames from a parent Chapter instance.*/
    }

 }
}

I get an error message telling me: "1120: Access of undefined property numberOfFrames." so the getter function itself seems not to be allowed to use numberOfFrames. But I dont see why, for all examples I found (although working just with two classes and no binding) make the getter return a var just like that. Do I miss something there?

4

2 回答 2

0

您已将 getter 定义为静态的。只需删除 static 关键字:

public function get getNumberOfFrames():uint
{
    return numberOfFrames;
}

将某些东西定义为静态意味着类的每个实例都使用属性或方法的单个实例——我猜这不是你想要的(大概你创建的每个章节可能有不同的 numberOfFrames 值?)

于 2013-07-20T17:45:09.110 回答
0

您的getNumberOfFrames()函数是一个静态函数,但它试图访问numberOfFrames哪个是实例成员变量。您必须创建 的实例,Chapter1以便numberOfFrames分配 的实例 -numberOfFrames不存在于 的特定实例之外Chapter1

此外,getNumberOfFrames()函数本身需要访问Chapter1实例以检索其numberOfFrames成员 - 每个实例之外都存在一个静态函数。

一种可能的解决方案是为您的类分配一个Chapter1实例,Transition以便在尝试获取帧数时可以在内部使用该实例。

如果您的程序中可以有多个Chapter1和多个Transition对象,我建议static从您的类中删除关键字,因为所有静态函数都需要一个实例才能使用。

于 2013-07-20T17:45:19.977 回答