2017-02-03 3 views
0

2d 플랫폼 작성자 Im, 스페이스 바를 길게 누르면 플레이어가 더 오랫동안 점프하려고합니다. 지금은 플레이어가 위아래로 뛰어 오를 수 있지만, 이드는 로봇 유니콘이 키를 누르고있을 때와 같은 효과를냅니다. 이 일을 어떻게 하죠? Im은 페이저 나 다른 것을 사용하지 않으며, 대부분의 튜토리얼은 그것을 사용합니다. 내 업데이트 방법에있는 것들 Heres :자바 스크립트에서 점프 스프라이트가 오랫동안 지속 되었습니까?

 var gameEngine = this.game; 

if (gameEngine.keyMap["Space"] && !this.jumping) { //only jump if not already in mid jump 

    this.jumping = true; 
    this.animationCurrent.elapsedTime = 0; 
    this.game.space = false; 
} 

if (this.jumping) { 

    if (this.animationCurrent.isDone()) { 
     this.animationCurrent.elapsedTime = 0; 
     this.jumping = false; 
    } 

    var jumpDistance = this.animationCurrent.elapsedTime/
     this.animationCurrent.totalTime; 

    var totalHeight = 150; 

    if (jumpDistance > 0.5) 
     jumpDistance = 1 - jumpDistance; 
    var height = totalHeight * (-4 * (jumpDistance * jumpDistance - jumpDistance)); 
    this.y = this.ground - height; 
    console.log(this.y); 
} 
+0

당신은 onkeypressed를 사용하고 있습니까? 그렇다면 이것은 아마도 의도적으로 가능하지 않습니다. onkeydown을 사용하고 있습니까? 그렇다면 점프 높이를 시간의 경과에 따라 보너스로 조절할 수 있습니다. +150, +15, +5, +1. –

+0

@TravisJ onkeydown을 사용 중입니다. – thatsnifty

답변

1

기본적으로 점프 키를 계속 누르면 점차적으로 감소하는 힘을 캐릭터에 적용하는 시스템을 구현해야합니다.

현재 애니메이션에 점프 높이를 매고있는 것처럼 보입니까? 정확히 이런 이유로는 이상적이지 않습니다. 물건을 조정하면 공허가됩니다. 물리 기반 접근 방식이 더 필요합니다. 봉투 의사 코드의

기본 뒤로 :

올드 스타일 상수 점프 모션 :

const JUMP_STRENGTH = 100; 
const GRAVITY = 10; 

onJumpKeyupPress(){ 
    if(play.canJump) 
    player.transform.up.velocity = JUMP_STRENGTH; 

} 

gameTick(){ 
    if(!player.onGround) 
    { 
     player.up.velocity -= GRAVITY 
     player.y += player.up.velocity; 
    } 
    else{ 
     player.up.velocity = 0; 
    } 
} 

당신이 볼 수 있듯이,이 플레이어 캐릭터의 초과 근무를 아래로 끌어 중력을 사용합니다. 사용자가 점프 키이 들고 동안

큰 점프 점프 가압하지만 모든 힘이 동시에인가된다 :이 예에서는

const JUMP_STRENGTH = 100; 
const GRAVITY = 10; 

var jumpStrength = 0; 

onJumpKeyupPress(){ 
    if(play.canJump) 
    jumpStrength = JUMP_STRENGTH; 
} 

gameTick(){ 
    if(!player.onGround) 
    { 
     if(jumpKeyIsStillPressed){ 
      player.up.velocity += jumpStrength; 
      jumpStrength /= 2; 
     } 
     player.up.velocity -= GRAVITY; 
     player.y += player.up.velocity; 
    } 
    else{ 
     player.up.velocity = 0; 
     jumpStrength = 0; 
    } 
} 

를 사용자가 각각 절반 (100)의 초기 점프 강도를 얻을 중력이 강할 때까지 진드기.

잘하면 나는 분명히했습니다!

+0

매우 잘 작동합니다! 내 유일한 문제는 올라가는 대신에 뛰어 내리는 것입니다. 어떻게 해결할 수 있을까요? – thatsnifty

+0

나는 그것을 알아 냈다고 생각하는데 player.y + = player.up.velocity를 player.y- = player.up.velocity로 변경했습니다. – thatsnifty

+0

더 빨리 진행할 수있는 방법이 있습니까? 중력을 바꿀 때조차도 천천히 위아래로갑니다. – thatsnifty

관련 문제