0

オブジェクト(ムービークリップ)をクリックすると関数が呼び出され、その関数がオブジェクトを画面から削除して爆発を表示するように、アニメーションを機能させる方法を理解するのに苦労しています。コードは以下のとおりです (私の EnemyShip.as ファイルから):

package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.MouseEvent;

public class EnemyShipMed extends MovieClip
{
    var speed:Number;

    function EnemyShipMed()
    {
        this.x = 800;
        this.y = Math.random() * 275 + 75;
        speed = Math.random()*5 + 6;
        addEventListener("enterFrame", enterFrame);
        addEventListener(MouseEvent.MOUSE_DOWN, mouseShoot);
    }

        function enterFrame(e:Event)
        {
            this.x -= speed;
            if(this.x < -100)
            {
                removeEventListener("enterFrame", enterFrame);
                stage.removeChild(this);
            }
        }

        function kill()
        {
            var explosion = new Explosion();
            stage.addChild(explosion);
            explosion.x = this.x;
            explosion.y = this.y;
            removeEventListener("enterFrame", enterFrame);
            stage.removeChild(this);
        }

        function mouseShoot(event:MouseEvent)
        {
            kill();
        }
    }
}

マウス ポインターを十字線に置き換えました (ムービー クリップは crosshair_mc と呼ばれます)。Main.as ファイルにあるものは次のとおりです。

package  {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.ui.Mouse;
import flash.media.Sound;
import flash.media.SoundChannel;

public class Main extends MovieClip {

public var crosshair:crosshair_mc;
var enemyShipTimer:Timer;
var enemyShipTimerMed:Timer;
var enemyShipTimerSmall:Timer;

public function Main()
{
    enemyShipTimer = new Timer(2000);
    enemyShipTimer.addEventListener("timer", sendEnemy);
    enemyShipTimer.start();

    enemyShipTimerMed = new Timer(2500);
    enemyShipTimerMed.addEventListener("timer", sendEnemyMed);
    enemyShipTimerMed.start();

    enemyShipTimerSmall = new Timer(2750);
    enemyShipTimerSmall.addEventListener("timer", sendEnemySmall);
    enemyShipTimerSmall.start();

    //This creates a new instance of the cursor movie clip and adds it onto
    //the stage using the addChild method.
    crosshair = new crosshair_mc();
    addChild(crosshair);

    //Hides the default cursor on the stage so it will not be shown.
    Mouse.hide();

    //Adds an event listener onto the stage with the enter frame event which
    //repeatedly executes the moveCursor function.
    stage.addEventListener(Event.ENTER_FRAME, moveCursor);
}

function sendEnemy(e:Event)
{
    var enemy = new EnemyShip();
    stage.addChild(enemy);
    stage.addChild(crosshair);//brings crosshair to topmost level on stage
}

function sendEnemyMed(e:Event)
{
    var enemymed = new EnemyShipMed();
    stage.addChild(enemymed);
    stage.addChild(crosshair);//brings crosshair to topmost level on stage
}

function sendEnemySmall(e:Event)
{
    var enemysmall = new EnemyShipSmall();
    stage.addChild(enemysmall);
    stage.addChild(crosshair);//brings crosshair to topmost level on stage
}
//This function set the x & y positions of the custom cursor to the x & y positions
//of the default cursor.
function moveCursor(event:Event) 
{
  crosshair.x=mouseX;
  crosshair.y=mouseY;
     }
   }
}

ありがとう。

4

1 に答える 1

1

私の推測では、十字線は常にマウスの下にあるため、すべてのクリック イベントをキャッチしていると思います。設定

  crosshair_mc.mouseEnabled = crosshair_mc.mouseChildren = false;

マウスイベントに対して「透明」にします。

于 2013-04-24T16:28:32.417 に答える