0

我目前正在尝试创建一个小应用程序时遇到问题,这是我第一次尝试处理类,但由于某种原因,即使它已导入文档,我也无法创建该类的任何实例。这是该类的代码(名为“Players”):

package
{
public class Player
{
    public function Player(name_:String)
    {

    }

    public var name_:String;
    private var alignment:int;
    public var healed:Boolean = false;
    public var revealed:Boolean = false;
    public var attacked:Boolean = false;
    public var dead:Boolean = false;

    public function action(target:Player)
    {

    }

    public function describe():String
    {

    }
}

public class Citizen extends Player
{
    public function Citizen(name_:String)
    {
        alignment = 1;
    }

    override public function action(target:Player)
    {

    }

    override public function describe():String
    {
        return "Citizen";
    }
}

public class Investigator extends Player
{
    public function Investigator(name_:String)
    {
        alignment = 1;
    }

    override public function action(target:Player)
    {
        target.revealed = true;
    }

    override public function describe():String
    {
        return "Cop";
    }
}

public class Doctor extends Player
{
    public function Doctor(name_:String)
    {
        alignment = 1;
    }

    override public function action(target:Player)
    {
        target.healed = true;
    }

    override public function describe():String
    {
        return "Doctor";
    }
}

public class Mafioso extends Player
{
    public function Mafioso(name_:String)
    {
        alignment = -1;
    }

    override public function action(target:Player)
    {
        target.attacked = true;
    }

    override public function describe():String
    {
        return "Mafia";
    }
}
}

以及创建实例的代码:

导入玩家;

stop();

var totalplayers:Number;
var playerArray:Array = new Array();
var playerType:Array = ["Citizen","Cop","Doctor","Mafia"];

var test:Citizen = new Citizen("James");

两者都在同一个文件夹中。我得到了标题中描述的错误代码 1046,但老实说,我不知道为什么,flash 在代码提示中找到了它,但它却出现了!任何帮助,将不胜感激。

也是次要问题,我永远不会启动 Player 类(除非通过与其他类的继承),所以我可以将其设为私有吗?

谢谢

4

3 回答 3

4

我假设所有代码都在一个名为Players.as.

这是错误的。每个文件应包含一个类,并且该类应与文件同名.as

您当前在一个文件中有两个类 (Player和)。Citizen

您需要做的是获取Player您定义的类并将其放在它自己的.as. 同名文件(播放器)。对 做同样的事情Citizen

然后你可以使用:

import Player;
import Citizen;

尽管这不是必需的,因为您不需要导入与您尝试访问它的目录位于同一目录中的类。

至于错误,您会得到它,因为 Flash 正在尝试查找该类Players,而您没有具有该名称的类(只是具有该名称的文件)。

于 2012-07-16T04:59:54.060 回答
4

根据关于 ActionScript 是否支持私有类的第二个问题,如果您有一个类,除非在内部由公共类访问,否则您可以将其定义为内部。

内部类对当前包内的引用可见。

如果您不希望类在包外公开可见,请将类放在包内并使用 internal 属性标记该类。或者,您可以省略 internal 和 public 属性,编译器会自动为您添加 internal 属性。您还可以将类定义为仅在定义它的源文件中可见。将类放在源文件的底部,包定义的右大括号下方。

在以下示例中,XY类都定义在单个文件 (X.as) 中。 X可以正常引用和实例化;但是,Y它是内部的,X并且只能从X.

package
{
    import flash.display.Sprite;

    public class X extends Sprite
    {
        public function X()
        {
            super();

            var y:Y = new Y();
        }
    }
}

internal class Y
{
    public function Y()
    {
        trace("internal Y ctor.");
    }
}

当一个类需要在类外无法访问的小型数据模型时,这种模式很有用。

于 2012-07-16T05:11:18.553 回答
1

同意其他人这里应该如下图(注意文件名匹配类名,文件名在代码块上方的括号中表示)。此外,您编写了 import Players 而不是 import Player,无论其他发帖人写道,如果所有类当前都在默认包中,则导入是不必要的。

[播放器.as]

package
{
    public class Player
    {
        public function Player(name_:String)
        {

        }

        public var name_:String;
        private var alignment:int;
        public var healed:Boolean = false;
        public var revealed:Boolean = false;
        public var attacked:Boolean = false;
        public var dead:Boolean = false;

        public function action(target:Player)
        {

        }

        public function describe():String
        {

        }
    }
}

[公民.as]

package
{   
    public class Citizen extends Player
    {
        public function Citizen(name_:String)
        {
            alignment = 1;
        }

        override public function action(target:Player)
        {

        }

        override public function describe():String
        {
            return "Citizen";
        }
    }
}

[调查员.as]

package
{
    public class Investigator extends Player
    {
        public function Investigator(name_:String)
        {
            alignment = 1;
        }

        override public function action(target:Player)
        {
            target.revealed = true;
        }

        override public function describe():String
        {
            return "Cop";
        }
    }
}

[医生.as]

package
{
    public class Doctor extends Player
    {
        public function Doctor(name_:String)
        {
            alignment = 1;
        }

        override public function action(target:Player)
        {
            target.healed = true;
        }

        override public function describe():String
        {
            return "Doctor";
        }
    }
}

[黑手党.as]

package
{
    public class Mafioso extends Player
    {
        public function Mafioso(name_:String)
        {
            alignment = -1;
        }

        override public function action(target:Player)
        {
            target.attacked = true;
        }

        override public function describe():String
        {
            return "Mafia";
        }
    }
}

不幸的是没有抽象类,因为这将是抽象类和抽象方法的理想情况。

于 2012-07-16T05:51:42.810 回答