2014-02-05 3 views
0

나는 우주에서 항해하는 플레이어가 있습니다. 공간이기 때문에 중력이 없기 때문에 파라볼 궤적이 없습니다. 플레이어는 왼쪽에서 오른쪽으로 수평선을 따라 가고 있습니다. 플레이어는 실제로 움직이지 않지만 배경은 그렇기 때문에 마치 그가있는 것처럼 보입니다. x 값은 고정되어 있습니다.코로나 SDK : 플레이어 이동 위아래

나는 플레이어가 소행성과 같은 장애물을 피하는 데 도움이되는 2 개의 버튼이 있습니다. 하나의 버튼은 플레이어에게 위쪽으로 힘을주고 다른 하나는 아래쪽으로 힘을줍니다. 버튼을 누를 때 호출되는 함수는 다음과 같습니다.

 
function moveUp(event) 
     if event.phase == "ended" then

  player:applyForce(0, 8, player.x, player.y) 
      player:setSequence("jump") 
      jumpChannel = audio.play(jumpSound) 
     end 
    return true 
end 

함수 moveDown (이벤트) 는 event.phase ==이라면

player:applyForce(0, -8, player.x, player.y) player:setSequence("jump") jumpChannel = audio.play(jumpSound) end return true end

이 구현에 대한 문제는 힘이인가 될 때마다, 플레이어가가는 유지한다는 것이다 "종료" 그 방향. 그런 다음 반대 방향으로 힘을 가해 야하고 그는 그 방향으로 영원히 계속 갈 것입니다. 그건 내가 원하는 것이 아니다. 내가 원하는 것은 :

UP을 누르면
  • 는, 플레이어는 새로운 고도에 왼쪽에서 오른쪽으로 플레이어가 수평 방향으로 가고 계속 그런 Y. 특정 값 (예를 들어 50 픽셀)를 위해 간다.

  • DOWN을 누르면 플레이어가 특정 값 아래로 떨어집니다. 그런 다음 플레이어는 새로운 고도에서 왼쪽에서 오른쪽으로 수평 방향으로 계속 진행합니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? applyForce 함수를 사용하여이 작업을 수행 할 수 있습니까? 아니면 다른 방법이 있습니까? 시간 내 미리 감사드립니다.

답변

1

F = ma : 적용한 힘이 0이면 a는 속도가 변하지 않는다는 것을 의미합니다.

  1. 가 속도를 감소 반대의 힘을 적용하고, 속도가 모든 바디가 아닌 제로로 설정할 수 있습니다 요인을 myBody.linearDamping 한 0 일 때 정지 : 당신은 두 가지 선택이있다. 당신이 몸의 속도에이 비례하게, 그래서 당신은 현재 속도에 따라 힘을 업데이트하는 enterFrame 이벤트 핸들러가 필요합니다 : 문제가 해결되지 않으면, 당신은 당신의 자신의 댐핑을 적용 할 수 있습니다

    function enterFrame(e) 
        local v = player:getLinearVelocity() 
        player:applyForce(- a * v) 
    end 
    

    여기에 "A"를 댐핑 (damping)이고, 임의의 숫자 (0은 현재 갖고있는 값이고, 클수록 빠를수록 0 속도로 돌아갑니다). applyForce()가 추가되는지 (기존의 힘에 추가되는지) 절대적으로 (기존의 것을 대체하는지) 확인하지 않았습니다. 그러나 당신은 아이디어를 얻습니다.

  2. 직접 플레이어를 이동 :

    function moveUp(event) 
        if event.phase == "ended" then 
         player:setLinearVelocity(0, 8) -- pixels/sec 
    

    당신은 여전히 ​​위치와 원하는 위치에 도달 setLinearVelocity (0,0)을 모니터링 할 수는 enterFrame 핸들러가 필요합니다.

당신은 부드러운 얻을 것이다는 힘을 사용하여 옵션 1.

+0

더 "현실적"운동은 항상 부드럽고 더 현실이다. linearDamping 요소는 매력처럼 작동합니다. 고마워, 정말 고마워! – Henok