2017-11-20 13 views
1

오른쪽 화살표 키와 위쪽 화살표 키를 눌러 내 플레이어가 대각선으로 점프하려고 시도 할 때 아무 것도하지 않으면 왜 추적했는지 알 수 없습니다. 일어 났고 함께 사용되었을 때는 아무것도 없었습니다.대각선으로 점프하는 플레이어를 고치는 데 도움이 필요합니다. Flash CS4

업은 자체적으로 또는 권리와 함께 작동하지 않지만, 권리가 자체적으로 작동하는 경우 작동합니다.

플레이어는 영웅, 플랫폼은 플랫폼 명명, PLATFORM2, platform3 등

플랫폼 내가에서 코드 청크에 뛰어 플레이어를 얻으려고

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; 
    } 

} 

플랫폼 층에있는 이름 맨 마지막

플래시 CS4

+1

자바 플래시 무엇입니까? – Kayaman

+1

플래시가 죽어 가고 있다는 것을 알고 있습니까? –

+0

그것은 클래스 프로젝트를위한 것입니다 –

답변

1

시작하려면 AS3,의는이 코드를 설정 한 방법 통과하고 설명 할 것 일어나는거야. 모든 프레임이 hero이 존재하는지 체크 말하고

hero.addEventListener(Event.ENTER_FRAME, testCollision2); 

이 함수 testCollision2을 실행

는이 라인을 가지고있다. 여기 프레임 틱 은 타임 라인 프레임과 관련된이 아니며 응용 프로그램의 프레임 속도와 관련이 있습니다. 따라서 12로 설정하면 매월 12 회 해당 기능이 실행됩니다.

stage.addEventListener(KeyboardEvent.KEY_DOWN, moveHeroUP); 

moveHeroUP라는 인라인 함수를 만들 :

testCollision2 내부, 다른 청취자를 추가합니다. 그래서 모든 프레임 틱, 당신은 새로운 기능을 만들고, 키 다운 이벤트에 첨부하십시오. 따라서 (초당 12 프레임을 가정 할 때) 응용 프로그램에 5 초가 걸리면 60 개의 키보드 리스너가 모두 동일한 작업을 수행하게됩니다. 이것은 또한 메모리 누수입니다 (모든 프레임마다 새로운 함수를 작성하는 것처럼) 결국 프로그램이 중단됩니다.

실제 질문에 도달하려면 키보드 이벤트가 하나의 특정 키에 묶여 있어야합니다. 이는 이벤트의 keyCode가 하나의 키 (이벤트를 트리거 한 키)라는 것을 의미합니다. 따라서 (event.keyCode==Keyboard.UP && event.keyCode==Keyboard.RIGHT)과 같이하면 event.keyCode에 하나의 값만 포함되기 때문에 항상 false이됩니다.

상황에 맞는 일반적인 접근 방식은 하나의 글로벌 키를 누르고 키 수신기를 사용하는 것입니다. 키 다운 이벤트가 발생, 당신은 사전으로 키 코드와 (true로 사전에 값을 설정할 때

당신이 무슨 일을하는지
//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

많은 감사를드립니다. –