-1

AS3 と Box2D を使用してプレーヤーを作成する場合、プレーヤーを移動させることはできますが、たとえば x++ などの AS3 を使用して移動する場合のようにプレーヤーを移動させることはできません。ApplyImpulse(new b2Vec2(1,0),GetWorldCenter()) とは対照的です。プレーヤーをフラッシュのように動かすにはどうすればよいでしょうか。正しく機能しない ApplyForce と SetPosition も試しました。プレーヤーが非常に浮いているか、コントロールにすぐに反応しません。アドバイスをいただければ幸いです。

問題があれば、落ち込んで立ち去るのではなく、説明していただけますか?

4

1 に答える 1

1

GetLinerVelocity を使用してから、ApplyImpulse を使用してみませんか。このプロパティで作成した機能が動作する可能性があります。もちろん、正確なキーを使用して前に 2 つの関数を作成しました...つまり、次のようなものです。

player_normal は、休息中のプレイヤー (オブジェクト) です。もちろん、player_max_speed と player_speed は、私が好きなように移動するために追加する他のプロパティです...

            player_speed = 2;
            player_max_speed = 4;
            player_normal = new b2Vec2(0, 0);

これは関数 Main に入ります。それらを Number var として設定した速度と max_speed であり、法線は単に b2Vec2 です。

これは、キーを押し下げてから押し上げたときのキー機能です。

private function apreto(e:KeyboardEvent):void
        {
            switch (e.keyCode)
            {
                case 37: 
                    left = true;
                    break;
} 

private function suelto(e:KeyboardEvent):void
        {
            switch (e.keyCode)
            {
                case 37: 
                    left = false;
                    break;
}

もちろん、「左」はブール値です。非常に簡単だと思います..そして、すべてのキー(右、上、下)で同じことを行う必要があります。それは、必要なキーの種類によって異なります。たとえば、数字 37 = キーボードに残っているキー。

そして、プレーヤーに動きを与えるコード(更新中):

if (player_normal.x >= 0)
            {
                if (left)
                {
                    if (player.GetLinearVelocity().x > -player_max_speed)
                    {
                        player.ApplyImpulse(new b2Vec2( -player_speed, 0), player.GetWorldCenter());
                    }
                }
            }

それがあなたの役に立てば幸いです...私に知らせなければ、もっと簡単な別の方法があります。ご質問にお答えできることがあれば、喜んでお手伝いさせていただきます。

于 2012-11-20T12:51:19.020 に答える