1

これは、私のゲームの 1 つにこれを使用する必要がある最初の時間です。キャラクターをジャンプさせたい。私は約 1 時間この結果を得ようとしてきましたが、うまくいきませんでした =( 私は AS3 を使用しており、CS5.5 をフラッシュしています。誰か助けてくれませんか?

これまでの私のコードは次のとおりです。

public class Dodgeball extends MovieClip
{
    public var character:Character;
    public var rightDown:Boolean = false;
    public var leftDown:Boolean = false;
    public var speed:Number = 3;
    public var timer:Timer;


    public function Dodgeball()
    {

        character= new Character();
        addChild(character);

        stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);
        stage.addEventListener(KeyboardEvent.KEY_UP, MyKeyUp);
        timer = new Timer(24);
        timer.addEventListener(TimerEvent.TIMER, moveClip);
        timer.start();

    }
    public function myKeyDown(event:KeyboardEvent):void
    {
        if (event.keyCode == Keyboard.RIGHT)
        {
        rightDown = true;

            if(character.currentLabel != "walkingRight")
            {
                character.gotoAndStop ("walkingRight");
            }
        }
        if (event.keyCode == Keyboard.LEFT)
        {
            leftDown = true;
                if (character.currentLabel != "backingUp")
                {
                    character.gotoAndStop("backingUp");
                }
        }
    }
    public function MyKeyUp(event:KeyboardEvent):void
    {
        if(event.keyCode == Keyboard.RIGHT)
        {
            character.gotoAndStop("standing");
            rightDown = false;
        }
        if (event.keyCode == Keyboard.LEFT)
        {
            character.gotoAndStop("standingLeft");
            leftDown = false;
        }
    }
    public function moveClip(event:TimerEvent):void
    {
        if (rightDown)
        {
            character.x += speed;
        }
        if (leftDown)
        {
            character.x -=speed;
        }
        event.updateAfterEvent();
    }
}

}

4

3 に答える 3

1

非常に単純なアプローチは、垂直方向の速度と水平方向の速度を設定することです。ユーザーが「UP」または「JUMP」を押したら、y 速度を負の値に設定し、movieClip 関数で更新します。キャラクターが一定の高さに達したら、速度を逆転させます。

重力と加速度を使用する方が良さそうに見えますが、ここから始めるのが本当に良い場所です。運動方程式を調べて、キャラクターを加速させる方法を確認してください。

public var originalY;

public function myKeyDown(event:KeyboardEvent):void
{
    if (event.keyCode == Keyboard.UP && vSpeed == 0)
    {
        originalY = character.y;
        ySpeed = -1;
    }
}


public function moveClip(event:TimerEvent):void
{
    if (vSpeed != 0)
    {
        character.y += vSpeed;

        /* make the character fall down after reaching max jump height */
        if(originalY - character.y > jumpHeight) {
            vSpeed = vSpeed * -1;
        }

        /* level the character after he's hit the ground (so he doesn't go through) */
        else if(character.y >= originalY) {
            character.y = originalY;
            vSpeed = 0;
        }
    }
}
于 2012-04-28T21:15:02.263 に答える
1

http://www.actionscript.org/forums/showthread.php3?t=256009speed変数と同様gravに、文字の垂直位置を決定します。

var grav:Number = 10;
var jumping:Boolean = false;
var jumpPow:Number = 0;

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(Event.ENTER_FRAME, update);

function onKeyDown(evt:KeyboardEvent):void
{
    if(evt.keyCode == Keyboard.UP)
    {
        if(jumping != true)
        {
            jumpPow = -50;
            jumping = true;
        }
    }   
}


function update(evt:Event):void
{
    if(jumping)
    {
        player_mc.y += jumpPow;
        jumpPow += grav;

        if(player_mc.y >= stage.stageHeight)
        {
            jumping = false;
            player_mc.y = stage.stageHeight;
        }
    }
}    

編集:ジェイソンの方法は問題ありませんが、何らかの衝突検出を計画している場合に役立つかどうかはわかりません。

于 2012-04-28T21:07:00.367 に答える
1

私がすることは、キャラクターがジャンプするモーショントゥイーンを作成することです。次に、そのフレームで gotoAndPlay を呼び出し、トゥイーンの最後のフレームで停止を配置するか、「静止」フレームに gotoAndStop を配置するか、またはフレームがニュートラルな位置を表すようにします。

   if (event.keyCode == Keyboard.SHIFT)
   {
       character.gotoAndPlay("simpleJump");
       jumpDown = false;
   }

これにより、ルック アンド フィールを最大限にアニメーションで制御できます。プログラムで行うこともできますが、個人的にはお勧めしません。セットアップにかかる時間が短くなり、後でジャンプ アニメーションを微調整して改良することができます。ターゲットの近くにあるオブジェクトなどに基づいて、いくつかのタイプのジャンプ アニメーションを作成できます。

私はまた、このようなものを変更します:

if(character.currentLabel != "walkingRight")

いつ、どこで何かを実行できるかに関するすべてのルールを備えた新しい関数を定義することで、制御ロジックで次のように呼び出します。

if(characterCan(character,"walkright")) ...

characterCan(String) は、これが可能かどうかを確認するメソッドです。たとえば、ジャンプして射撃している場合、明らかに正しく歩くことはできないため、最終的には if ステートメントにロジックを追加する必要があり、ごちゃごちゃになります。

于 2012-04-28T21:01:28.937 に答える