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が表示されますが、正直なところわかりません。フラッシュがコードヒントでそれを検出しますが、それが発生します。どんな助けでもいただければ幸いです。

また、二次的な質問ですが、Playerクラスを開始することは決してありません(他のクラスとの継承を除く)ので、プライベートにすることはできますか?

ありがとう

4

3 に答える 3

4

そのコードはすべて、というファイルにあると思いますPlayers.as

これは間違っています。各ファイルには1つのクラスが含まれている必要があり、クラスはファイルと同じ名前である必要があり.asます。

現在、1つのファイル内に2つのクラス(PlayerおよびCitizen)があります。

あなたがする必要があるのは、Playerあなたが定義したクラスを取り、それをそれ自身の中に置くこと.asです。同じ名前のファイル(プレーヤー)。についても同じようにしCitizenます。

次に、次を使用できます。

import Player;
import Citizen;

ただし、アクセスしようとしているのと同じディレクトリにあるクラスをインポートする必要がないため、これは必要ありません。

エラーに関しては、Flashがクラスを見つけようとしてPlayersいて、その名前のクラスがない(その名前のファイルだけ)ため、エラーが発生します。

于 2012-07-16T04:59:54.060 に答える
4

ActionScriptがプライベートクラスをサポートするかどうかに関する2番目の質問によると、パブリッククラスによる内部以外ではアクセスされないクラスがある場合は、それを内部クラスとして定義できます。

内部クラスは、現在のパッケージ内の参照に表示されます。

クラスをパッケージの外部で公開したくない場合は、クラスをパッケージの内部に配置し、クラスに内部属性のマークを付けます。または、internal属性とpublic属性の両方を省略して、コンパイラーが内部属性を自動的に追加することもできます。クラスを、それが定義されているソースファイル内でのみ表示されるように定義することもできます。クラスをソースファイルの下部、パッケージ定義の閉じ中括弧の下に配置します。

次の例では、XYクラスの両方が1つのファイル(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

ここで他の人と同意するのは、以下のようにする必要があります(ファイル名はクラス名と一致し、ファイル名はコードブロックの上の括弧内に示されていることに注意してください)。また、他の投稿者がすべてのクラスが現在デフォルトパッケージに含まれているかどうかに関係なく、インポートプレーヤーの代わりにインポートプレーヤーを記述しました。インポートは不要です。

[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
        {

        }
    }
}

[Citizen.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";
        }
    }
}

[Investigator.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";
        }
    }
}

[Doctor.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";
        }
    }
}

[Mafioso.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 に答える