0

私の問題は次のような質問です: ArgumentError: Error #1063

違いは、ドキュメント クラスが読み込まれた後にこのエラーが発生し、ボタンをクリックして Game() クラスを開始することです。PowerUp() クラスは、プログラムによって呼び出されることなく、自動的にエラーを生成します。PowerUp() クラス コンストラクターの最初のパラメーターが値を受け取っていないことがわかりました。

public function PowerUp(tar:Object,s:Number=1, a:String="bonusShots",t:String="Multi Shot", l:int=100):void {/// その他のコード

ムービークリップ「thePlayer」をステージから PowerUp() クラス コンストラクターの最初のパラメーターに配置する必要があります。

「thePlayer」をコンストラクターに追加すると、「オブジェクトはコンパイル時定数ではありません」という別のエラーが発生します。

 var thePlayer: MovieClip=thePlayer;

public function PowerUp(tar:Object=thePlayer,s:Number=1, a:String="bonusShots",t:String="Multi Shot", l:int=100):void {/// その他のコード

質問: 「thePlayer」ムービークリップを PowerUp クラスのコンストラクターに組み込むにはどうすればよいですか?

PowerUp クラスのコードは次のとおりです。

public class PowerUp extends Sprite{


        protected var type:String;// type of power up

        protected var strength:Number;// power of power up

        protected var attribute:String;// attribute effected by power up

        protected var target:Object;// target to buff/boost/perk up/ empower/improve/enhance

        protected var lifespan:int;// the life span of a perk

        protected var maxLifeSpan:int; // max time to live grahic

        const BAR_WIDTH=100;// width of rect

        const BAR_HEIGHT=15;// height of rect



    public function PowerUp(tar:Object,s:Number=1, a:String="bonusShots",t:String="Multi Shot", l:int=100):void {


            type=t;

            strength=s;

            attribute=a;

            target=tar;

            lifespan=l;

            maxLifeSpan=l;

            perkName.text=t;
            perkName.blendMode="invert";

            // apply perk to target
            target[attribute]+=strength;

        }//  end constructor 
4

2 に答える 2

1
var thePlayer: MovieClip=thePlayer;

ここでは、変数をそれ自体として割り当てています。次のようなものを使用してみてください:

var _thePlayer:Player = new Player();

Player は、クラスまたは共有ライブラリ アイテムとしてどこかに存在する必要があります。

常に Player オブジェクトを PowerUp クラスに渡す場合は、最初の引数を Player としてキャストすることもできます。

public function PowerUp(tar:Player,
于 2012-11-07T07:38:48.617 に答える
1

自動的に構築されるクラスのコンストラクターに引数を指定することはできません。これまで見てきたように、デフォルト値にはコンパイル時定数しか使用できません。言い換えれば、コンパイラがコードを解析するときに値として理解するものだけです。

最善の選択肢は、コンストラクターで引数を渡すことを避け、それをランタイムが必要とする技術的な関数として扱い、代わりに、自分で呼び出すことができる他の関数で初期化ジョブを実行することです。

たとえば、これがドキュメント クラスであるとします。

public class DocumentClass extends Sprite {
    public function DocumentClass() {
        super();
    }
    public function powerUp(tar:MovieClip):void {
        this.tar = tar;
    }
}

このクラスを初期化する必要がある場合は、powerUp関数を呼び出します。

于 2012-11-07T07:39:08.397 に答える