0

ここでは、関数 mvBall が呼び出されたときに移動する新しいムービークリップ タイプのオブジェクトを作成しようとしています。コードを実行すると、このエラーが発生します。静的型オブジェクトを持つ値の暗黙的な強制が、おそらく無関係な型の flash.display:MovieClip に変換されます。後で、ボールが別のオブジェクトと衝突したときにボールが跳ね返るようにしたいと考えています。私はアクションスクリプトが初めてで、物事がどのように機能するのかよくわからないので、助けていただければ幸いです。コードは次のとおりです。

private function frame(x:Event):void {
        var ball:MovieClip = new MovieClip();
        ball.addEventListener(Event.ENTER_FRAME, animate);
        ball.graphics.beginFill(0xff0000); 
        ball.graphics.drawCircle(100, 100, 15); 
        ball.graphics.endFill(); 
        stage.addChild(ball); 
    }

    private function animate(ev:Event):void {
        mvBall(ev.target);
    }

    private function mvBall(mc:MovieClip) {
        mc.x += 10;
    }
4

2 に答える 2

4

ターゲットを MovieClip にキャストする必要があります

private function animate(ev:Event):void {
    mvBall(ev.target as MovieClip);
}

そうは言っても、ENTER_FRAME ハンドラを 1 つだけ用意して、そこでオブジェクトをアニメーション化する方がよいでしょう。

stage.addEventListener(Event.ENTER_FRAME, animate);

private function animate(ev:Event):void
{
    mvBall(myBall);
    //other object animations
}
于 2012-11-06T22:49:51.187 に答える
0

targetEvent クラスのプロパティがオブジェクト型であるため、このエラーが発生しています。

エラーをスローしないようにするには、ムービークリップとしてキャストする必要があります。

mvBall(ev.target as MovieClip);

また

myBall(MovieClip(ev.target));

Event他に考慮すべきことは、 stargetcurrentTargetプロパティの違いです。ボールの中に複数のレイヤー/オブジェクト (スプライトまたは他のムービークリップ)targetがある場合、それらのサブ要素のいずれかがクリック中にマウスを上に置いたものになります。 currentTargetリスナーをアタッチしたオブジェクトを参照します。あなたの場合、それらは同じかもしれませんが (ボールの中にムービー クリップがない場合)、ボールの中に sub-movieClips がある場合、コードは予期しない結果をもたらす可能性があります。

于 2012-11-06T22:50:20.070 に答える