0

ムービークリップを別のムービークリップが移動する方向に移動するにはどうすればよいですか?私は、加速度計の更新で動いている獲物であるムービークリップを持っています。そして、フォロワーのムービークリップが獲物のようにそのムービークリップに追いつくようにしたいのです。獲物は加速度計の変化に伴って動いています。フォロワーのムービークリップに獲物をフォローしてもらいたい。これはできますか?

4

2 に答える 2

0

ムービークリップ#2を次のように最初のクリップに従わせることができます。

//this would usually be in an ENTER_FRAME event since there's no tweening going on here
//mc1 is your first movieclip, mc2 the second
mc1.x += 20; //this is the first one that needs to be followed
mc2.x = (mc1.x - 40); //this is the follower; it's always 40px horizontally behind mc1

また、「コンテナ」スプライトを使用することもできます。これは、他のスプライトまたはムービークリップを追加する空のスプライトです。それはこのように動作します:

myContainerVar.addChild(mc1); //myContainerVar is a(n empty) Sprite.
myContainerVar.addChild(mc2);
myContainerVar.x += 20; //this moves both movieclips.
//make sure you do this INSTEAD of the normal addChild(m1);!

ここで行っているのは、にとを追加するmc1ことmc2ですmyContainerVar。変数の移動などの変更myContainerVarは、に自動的に適用さmc1mc2ます。

ちょっとした補足:これをもう少し進んだ場合、統計的には、myContainerVarの位置を変更してもmc1とmc2の位置は変わらないことを知っておく必要があります。注意してください;)

于 2012-06-22T09:53:42.447 に答える
0

これは、あるクリップに別のクリップを追跡させる非常に簡単な方法です。これをコピーして新しいflaファイルに貼り付け、コンパイルして結果を確認します。

import flash.display.MovieClip;

var mcOne : MovieClip = new MovieClip();
mcOne.graphics.beginFill( 0x000000 );
mcOne.graphics.drawCircle( 0, 0, 10 );
mcOne.speedX = 1.9;
mcOne.speedY = 1.9;
addChild( mcOne );

var mcTwo : MovieClip = new MovieClip();
mcTwo.graphics.beginFill( 0xFF0000 );
mcTwo.graphics.drawCircle( 0, 0, 10 );
mcTwo.speedX = 2;
mcTwo.speedY = 2;
addChild( mcTwo );

moveClipsToRandomPosition( mcOne );
moveClipsToRandomPosition( mcTwo );

stage.addEventListener( Event.ENTER_FRAME, onStageEnterFrame );

function onStageEnterFrame( evt : Event ) : void
{
    moveMC( mcOne );
    chase( mcTwo, mcOne );
    checkBounds( mcOne );
}

function chase( chasingMC : MovieClip, chasedMC : MovieClip ) : void
{
    if( chasingMC.x < chasedMC.x )
    {
        if( chasingMC.x + chasingMC.speedX > chasedMC.x )
        {
            chasingMC.x = chasedMC.x;
        }
        else
        {
            chasingMC.x += chasingMC.speedX;
        }
    }
    else if( chasingMC.x > chasedMC.x )
    {
        if( chasingMC.x - chasingMC.speedX < chasedMC.x )
        {
            chasingMC.x = chasedMC.x;
        }
        else
        {
            chasingMC.x -= chasingMC.speedX;
        }
    }

    if( chasingMC.y < chasedMC.y )
    {
        if( chasingMC.y + chasingMC.speedY > chasedMC.y )
        {
            chasingMC.y = chasedMC.y;
        }
        else
        {
            chasingMC.y += chasingMC.speedY;
        }
    }
    else if( chasingMC.y > chasedMC.y )
    {
        if( chasingMC.y - chasingMC.speedY < chasedMC.y )
        {
            chasingMC.y = chasedMC.y;
        }
        else
        {
            chasingMC.y -= chasingMC.speedY;
        }
    }

    if( chasingMC.y == chasedMC.y && chasingMC.x == chasedMC.x )
    {
        trace( "ChasingMC caught chasedMC" );
        moveClipsToRandomPosition( mcOne );
        moveClipsToRandomPosition( mcTwo );
    }
}

function moveClipsToRandomPosition( mc : MovieClip ) : void
{
    mc.x = ( Math.random() * ( stage.stageWidth - 20 ) ) + 10;
    mc.y = ( Math.random() * ( stage.stageHeight - 20 ) ) + 10;
}

function moveMC( mc : MovieClip ) : void
{
    mc.x += mc.speedX;
    mc.y += mc.speedY;
}

function checkBounds( mc : MovieClip ) : void
{
    if( ( mc.x + mc.width / 2 ) >= stage.stageWidth )
    {
        mc.speedX *= -1;
    }
    else if( ( mc.x - mc.width / 2 ) <= 0 )
    {
        mc.speedX *= -1;
    }

    if( ( mc.y + mc.height / 2 ) >= stage.stageHeight )
    {
        mc.speedY *= -1;
    }
    else if( ( mc.y - mc.height / 2 ) <= 0 )
    {
        mc.speedY *= -1;
    }
}
于 2012-06-24T01:15:22.967 に答える