2017-11-20 5 views
1

右手と上向きの矢印キーを押して何もしないで私のプレーヤーが斜めにジャンプしようとすると、彼らが一緒に使われたときは何もなかった。プレーヤーが斜めにジャンプするのを助ける必要があるFlash CS4

アップは単独では機能しませんが、それだけでは機能しません。

プラットフォームは、私がコードチャンクにジャンプするプレーヤーを取得しようとしているプラ​​ットフォーム層

stop(); 

var gravity:Number=5; //Very important, allows player to fall 
var movex:Number=0; // Moving players X 
// Moving player 

stage.addEventListener(KeyboardEvent.KEY_DOWN, moveHero); 

var speed=10; 
function moveHero(event:KeyboardEvent) { 
    if (event.keyCode==Keyboard.LEFT) { 
     hero.x-=speed; 
     hero.play(); 
    } 

    if (event.keyCode==Keyboard.RIGHT) { 
     hero.x+=speed; 
     hero.play(); 
    } 

} 

hero.addEventListener(Event.ENTER_FRAME, testCollision2); 

// Allowing player to jump when on platform 
function testCollision2(e: Event) { 

//Allowing player to jump when on platform continued 
stage.addEventListener(KeyboardEvent.KEY_DOWN, moveHeroUP); 

function moveHeroUP(event:KeyboardEvent) { 
    if (hero.hitTestObject(platform) && event.keyCode==Keyboard.UP) { 
     gravity=-50; 
     hero.y=hero.y+gravity; 
    } else if (hero.hitTestObject(platform2) && event.keyCode==Keyboard.UP) { 
     gravity=-50; 
     hero.y=hero.y+gravity; 
    } else if (hero.hitTestObject(platform4) && event.keyCode==Keyboard.UP) { 
     gravity=-50; 
     hero.y=hero.y+gravity; 
    } 

    if(hero.hitTestObject(platform) && event.keyCode==Keyboard.UP && event.keyCode==Keyboard.RIGHT){ 
     movex = 20; 
     hero.x = hero.x + movex; 
     gravity =-50; 
     hero.y = hero.y + gravity; 
    } 

} 

であるplatform3など、

プレイヤーは、主人公の命名されているプラ​​ットフォームは、プラットフォームと命名され、プラットフォーム2最後

のFlash CS4

+1

Javaのフラッシュは何ですか? – Kayaman

+1

あなたはフラッシュが死んでいる/死んでいることは知っていますか? –

+0

これはクラスプロジェクトのためのものです –

答えて

1

を開始する AS3、あなたがこのコードを設定した方法を経ると説明させて何起こっている。 、すべてのフレームがheroが存在することをカチカチ言っている

hero.addEventListener(Event.ENTER_FRAME, testCollision2); 

は、機能testCollision2を実行します。

あなたはこのラインを持っています。フレームティックここでははタイムラインフレームに関係なく、アプリケーションのフレームレートに関係します。つまり、12に設定すると、その関数は毎秒12回実行されます。

stage.addEventListener(KeyboardEvent.KEY_DOWN, moveHeroUP); 

をしてmoveHeroUPと呼ばれるインライン関数を作成します。

testCollision2の内部では、別のリスナーを追加します。したがって、すべてのフレームティックでは、新しい関数を作成し、それをキーダウンイベントにアタッチします。したがって、アプリケーションに5秒間に12フレーム/秒と仮定すると、60のキーボードリスナはすべて同じことをします。これはメモリリークでもあります(フレームごとに新しい関数を作成し続けるため)、最終的にはプログラムがクラッシュします。

実際の問題を解決するには、キーボードイベントが1つの特定のキーに関連付けられています。つまり、イベントのkeyCodeは1つのキー(イベントをトリガーしたキー)のみです。したがって(event.keyCode==Keyboard.UP && event.keyCode==Keyboard.RIGHT)のようなものを実行すると、event.keyCodeは1つの値しか保持しないため、常にfalseになります。

あなたの状況に共通のアプローチは、グローバルキーを1つダウンさせ、キーアップリスナーを使用することです。そして、キーが現在ダウンである格納する辞書を使用します。

//create just one key down listener 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 

//create a dictionary to store key presses 
var keyboardDown:Dictionary = new Dictionary(); 

function keyDownHandler(e:KeyboardEvent):void { 
    keyboardDown[e.keyCode] = true; 
} 

function keyUpHandler(e:KeyboardEvent):void { 
    keyboardDown[e.keyCode] = false; 
} 

あなたがここに何をやっている時にキーダウンイベントが発生、である、あなたは真の辞書に値を設定します(キーコードで辞書としてキー)、次にキーアップイベントではfalseに設定します。

今、あなたのENTER_FRAMEハンドラで、あなたがキーの組み合わせを確認するために、辞書の値を使用します。

hero.addEventListener(Event.ENTER_FRAME, moveHero); 

function moveHero(event:Event) { 
    //DO ALL YOUR MOVEMENTS IN ONE ENTER FRAME FUNCTION 

    if (keyboardDown[Keyboard.LEFT]) { 
     hero.x-=speed; 
     hero.play(); 
    } 

    if (keyboardDown[Keyboard.RIGHT]) { 
     hero.x+=speed; 
     hero.play(); 
    } 

    if (hero.hitTestObject(platform) && keyboardDown[Keyboard.UP]) { 
     gravity=-50; 
     hero.y=hero.y+gravity; 
    } else if (hero.hitTestObject(platform2) && keyboardDown[Keyboard.UP]) { 
     gravity=-50; 
     hero.y=hero.y+gravity; 
    } else if (hero.hitTestObject(platform4) && keyboardDown[Keyboard.UP]) { 
     gravity=-50; 
     hero.y=hero.y+gravity; 
    } 

    if(hero.hitTestObject(platform) && keyboardDown[Keyboard.UP] && keyboardDown[Keyboard.RIGHT]){ 
     movex = 20; 
     hero.x = hero.x + movex; 
     gravity =-50; 
     hero.y = hero.y + gravity; 
    } 

} 
+0

非常に感謝しています –

関連する問題