0

「 http://www.lynda.com/ActionScript-3-tutorials/projects-game-development/366-2.html 」からアクション スクリプト 3.0 を学習し、その「第 1 章 > ゲームに勝つ」でスコアとダメージを与えるus が定義されていますが、ムービー クリップでエラーが発生しています。

私が作成しなければならず、ファイルからダウンロードしなかった 3 つのムービー クリップを使用します。は静的クラスであり、何かであってはなりません (フラッシュ プログラミングには本当に新しい))。3 つの段階で状態を示す 3 つのフレームがあります。

この静的クラスのエラーを修正する方法を教えてください。それが役立つ場合は、とにかく以下のコードとエラーを投稿してください。

前もって感謝します。

3つのエラーは

    1119: Access of possibly undefined property totalFrames through a reference with static type Class.
Source:    energy = mcEnergy.totalFrames;


1061: Call to a possibly undefined method gotoAndStop through a reference with static type Class.
mcEnergy.gotoAndStop(energy);


1061: Call to a possibly undefined method gotoAndStop through a reference with static type Class.
mcEnergy.gotoAndStop(energy);

これがメインステージのコードです

var monstersInGame:uint;
var monsterMaker:Timer;
var container_mc:MovieClip;
var cursor:MovieClip;
var score:int;
var energy:int;



function initializeGame():void
{
    monstersInGame = 10;
    monsterMaker = new Timer(1000, monstersInGame);
    container_mc = new MovieClip();
    addChild(container_mc);


    monsterMaker.addEventListener(TimerEvent.TIMER, createMonsters); 
    monsterMaker.start();


    cursor = new Cursor();
    addChild(cursor);
    cursor.enabled = false;
    Mouse.hide();
    stage.addEventListener(MouseEvent.MOUSE_MOVE, dragCursor);


    score = 0;
    energy = mcEnergy.totalFrames;
    mcEnergy.gotoAndStop(energy);
}

function dragCursor(event:MouseEvent):void
{
    cursor.x = this.mouseX;
    cursor.y = this.mouseY;
}

function createMonsters(event:TimerEvent):void
{
    var monster:MovieClip
    monster = new Monster();
    monster.x = Math.random() * stage.stageWidth;
    monster.y = Math.random() * stage.stageHeight;
    container_mc.addChild(monster);
}

function increaseScore():void
{
    score ++;
    if(score >= monstersInGame);
    {
        monsterMaker.stop();
        trace("Winning!!!");
    }

}

function decreaseEnergy():void
{
    energy --;
    if(energy <= 0)
    {
        monsterMaker.stop();
        trace("You lose");
    }
    else
    {
        mcEnergy.gotoAndStop(energy);
    }

}


initializeGame();

そしてモンスターはこちら

import fl.motion.Animator;
import fl.motion.MotionEvent;

var this_xml:XML = <Motion duration="30" xmlns="fl.motion.*" xmlns:geom="flash.geom.*" xmlns:filters="flash.filters.*">
    <source>
        <Source frameRate="12" x="227.65" y="291.3" scaleX="1" scaleY="1" rotation="0" elementType="movie clip" symbolName="Monster">
            <dimensions>
                <geom:Rectangle left="-17.85" top="-17.85" width="35.7" height="35.7"/>
            </dimensions>
            <transformationPoint>
                <geom:Point x="0.5" y="0.5"/>
            </transformationPoint>
        </Source>
    </source>

    <Keyframe index="0" tweenSnap="true" tweenSync="true">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="29" scaleX="2.357" scaleY="2.357"/>
</Motion>;

var this_animator:Animator = new Animator(this_xml, this);
this_animator.play();


this_animator.addEventListener(MotionEvent.MOTION_END, hurtPlayer);

function hurtPlayer(Event:MotionEvent):void
{
    var main:MovieClip = MovieClip(this.parent.parent);
    main.decreaseEnergy();
    this.parent.removeChild(this);
}

this.addEventListener(MouseEvent.CLICK, killMonster);

function killMonster(event:MouseEvent):void
{
this_xml = <Motion duration="5" xmlns="fl.motion.*" xmlns:geom="flash.geom.*" xmlns:filters="flash.filters.*">
    <source>
        <Source frameRate="12" x="236.95" y="163" scaleX="1" scaleY="1" rotation="0" elementType="movie clip" symbolName="Monster" class="Monster">
            <dimensions>
                <geom:Rectangle left="-17.85" top="-17.85" width="35.7" height="35.7"/>
            </dimensions>
            <transformationPoint>
                <geom:Point x="0.5" y="0.5"/>
            </transformationPoint>
        </Source>
    </source>

    <Keyframe index="0" tweenSnap="true" tweenSync="true">
        <tweens>
            <SimpleEase ease="0"/>
        </tweens>
    </Keyframe>

    <Keyframe index="4" scaleX="0.552" scaleY="0.552">
        <color>
            <Color alphaMultiplier="0"/>
        </color>
    </Keyframe>
</Motion>;

this_animator = new Animator(this_xml, this);
this_animator.play();

this_animator.addEventListener(MotionEvent.MOTION_END, die);

}

function die(event:MotionEvent):void
{
    var main:MovieClip = MovieClip(this.parent.parent);
    main.increaseScore();
    this_animator.removeEventListener(MotionEvent.MOTION_END, hurtPlayer);
    this.parent.removeChild(this);
}
4

4 に答える 4

2

さて、これはどうしたのです。あなたが言っているのですgotoAndStop();が、クラスにgotoandstop関数はありません。静的クラスは関数を介してのみ呼び出すことができます。静的にしたくない場合はmyclass.somefunction();、クラス内から呼び出すことは絶対にしないでください。

于 2013-01-14T02:30:55.557 に答える
0

問題は、mcEnergy という名前のクラスがあることです。インスタンス名が mcEnergy のクラスのインスタンスが必要です。ステージ上に mcEnergy クラスのインスタンスがありますか? もしそうなら、そのインスタンス名は何ですか? そうでない場合は、作成してそこに置く必要があります。ビルド時にそれを行うか (ライブラリからステージにドラッグ アンド ドロップし、そのインスタンス名を mcEnergy 以外に設定する)、または実行時にアクション スクリプトを介して作成するかどうかは問題ではありませんが、それは変数です。そこで使う必要があります。

ただし、クラス名の最初の文字を大文字にするのがベスト プラクティスと考えられています。したがって、現在 mcEnergy という名前のムービークリップがライブラリにあり、McEnergy である必要があります。次に、インスタンスの名前を mcEnergy にすると、現在持っているコードが機能するはずです。

于 2012-08-11T23:25:05.507 に答える
0

あなたのインスタンスはおそらくプロパティの段階で名前が付けられていませんが、問題を理解していればAS用にエクスポートされているだけです. ステージ上の mcEnergy へのすべての参照を次のように置き換えてみてください。

MovieClip(getChildAt(0));

これで問題が解決する場合は、メイン クラスでインスタンスを here-below としてのみ宣言する必要があります。

var mcEnergy:MovieClip = MovieClip(getChildAt(0));

ただし、プロパティでインスタンスに「mcEnergy」という名前を付けて、次のことを実行することをお勧めします。

var mcEnergy:MovieClip = MovieClip(getChildByName("mcEnergy"));

あなたが持っている ";" の

 if(score >= monstersInGame);

コードは {...} 内のステートメントを実行しません

于 2012-08-12T10:51:09.483 に答える
0

tatactic が回答したようmcEnergyに、ステージ内のインスタンスの名前ではなく、ライブラリのシンボルのクラス名のようです。の新しいインスタンスを作成し、mcEnergyそれを表示リストに追加する必要があります。

var energy_mc :MovieClip = new mcEnergy();
stage.addChild( energy_mc );

その後、への参照を次のように置き換えmcEnergyますenergy_mc

energy = energy_mc.totalFrames;
energy_mc.gotoAndStop( energy );
于 2012-08-12T17:46:58.037 に答える