2012-07-30 3 views
0

코딩을 연습하기 위해 탁구 복제품을 만들고 있는데, 패들에 맞았을 때 각도를 변경할 수 있도록 공을 만들고 있습니다.탁구 게임에서 볼 각도를 만드는 더 좋은 방법이 필요합니다.

내 현재 구현에는 공을 이동하기 위해 게임 루프와 함께 이동하는 공에 대한 deltaX와 deltaY가 있습니다. 내가 한 방법은 패들이 움직이는 동안 공을 치면 델타 Y가 패들의 방향에 따라 증가 또는 감소하지만 게임에 대해서는 자연스럽지 않다는 것입니다.

누구든지이 작업을 수행하는 더 좋은 방법을 알고 있습니까?

+1

SSCCE (짧음, 자체 포함, 올바른 예)를 제공하십시오 –

+0

종이에 그립니다. 볼이 90도에 도달하면 어떻게됩니까? 45시에 뭐야? -30시에 뭐야? 그런 다음이 각도를 변환하는 함수를 작성하십시오. – Konerak

+0

각도를 정의하는 방법은 무엇입니까? 외륜에서 또는 외륜에서 정상으로? –

답변

2

먼저해야 할 일은 deltaX와 deltaY를 ballAngle과 deltaSpeed로 변경하는 것입니다. 그렇게하면 직각 좌표계에서 극좌표로 이동할 수 있습니다. 공의 움직임의 특성 (직선으로 가면서 각 충돌시 선의 각도를 변경 함) 때문에 작업이 더 쉬워집니다. 이제부터 ballAngle을 변경하여 볼의 방향을 업데이트하면됩니다.

그러나 극좌표에서 직각 좌표로 다시 이동하기 위해 볼을 그리는 함수를 업데이트해야 화면에 표시 할 수 있습니다. 와

newPosition = oldPosition + movementVector 

: 고등학교 삼각 함수의 약간은 당신이 당신의 각도와 속도에 따라 화면 위치 델타를 계산하게됩니다 이러한 방정식은 상대에 따라 일부 수정해야 할 수도 있습니다 물론

movementVector.x = deltaSpeed*cos(ballAngle) 
movementVector.y = deltaSpeed*sin(ballAngle) 

당신이 공의 각도를 측정하는 것.

이제 패들과 충돌 할 때마다 볼의 각도를 수정하려면 패들의 어느 부분이 닿는 지에 따라 볼의 각도를 증가 또는 감소시켜야하고 그리기 기능의 수학이 처리되어야합니다 x와 y 위치를 현실적으로 업데이트합니다.

이 정보가 도움이되기를 바랍니다.

+0

이것은 좋은 아이디어처럼 들립니다. 고맙습니다! –

+0

충돌 후 새로운 각도를 계산할 수 있습니다. 실제 각도로 360도를 단순히 빼는 것입니다 (0º가 올바른 방향이라고 가정). 또한, 외륜이 움직이는 경우이를 수정할 수 있습니다. 이것은 충돌 순간에 외륜이 오른쪽으로 움직이는 경우 공이 어느 정도 후퇴합니다. – polypiel

+0

360을 빼면 다른 방향으로 가고 싶지만 매우 비현실적입니다. 최적으로 볼이 어느 각도에서 패들을 치는지 알아 내고 패들의 정상을 기준으로 미러링하는 것이 좋습니다. 일종의 반성과 같은, 정상과 관련하여 미러링. 이제 그가하고 싶은 일은 노를 젓는 위치에 따라 그 각도를 더욱 기울이는 것입니다. 일반적인 벽돌 깨기 또는 탁구 게임의 경우 표준입니다. –