이 질문은 프로그래밍 질문보다 더 많은 질문이기 때문에이 포럼에서 받아 들일 수있는 질문이되기를 바랍니다.회전에 따른 스프라이트의 이동
나는 cocos2d 프레임 워크를 사용하여 기본 우주 사수 게임을 개발 중입니다. 사용자가 우주선을 조종하고 소행성/적을 쏘고 적들이 우주선 (원래 어떨까요?)에서 다시 사격합니다.
적들에 의해 발사되는 '레이저'는 튜브 모양이며 일반적으로 x 축에서 오른쪽에서 왼쪽으로 만 이동합니다. 그래서,
currentEnemyProjectile.position = ccp(currentEnemyProjectile.position.x - ((screenSize.width/kLaserSpeed)* dtSixty), currentEnemyProjectile.position.y);
가 나는 또한 특정 적이 화면의 중앙에 상주하며 우주선에서의 발사체를 발사 회전이 달성하기 쉬운, 그리고 운동은 코드 줄이 만들어집니다 우주선이 적과 다른 y 위치에 있으면 발사체 스프라이트가 회전하고 우주선의 위치로 이동하므로 y 축을 통과해야합니다. 나는 현재이를 달성하기 위해 코드를 사용하고
: 난 그냥 임시 수정으로이 운동했다
float xDiff = ((screenSize.width/kLaserSpeed)* dtSixty);
float yDiff = (xDiff/57) * currentEnemyProjectile.rotation;
currentEnemyProjectile.position = ccp(currentEnemyProjectile.position.x - xDiff, currentEnemyProjectile.position.y + yDiff);
, 나는이 일을하는 최적의 방법이 아니다 알고있다. 그것은 일종의 일이지만, x 축을 따라 이동하는 것으로부터 y 오프셋을 계산할 때, 그들은 y 축을 따라 더 멀리 이동해야한다면 더 빠르게 움직일 것입니다. 이상적으로는 x 축을 따라 상향 또는 하향으로 움직이는 경우 느리게 움직여야하므로 궤적에 대한 이동 속도는 일정합니다. (내가 충분히 설명했으면 좋겠다.)
마지막으로 수학 수업을 한 지 약 10 년이되었으므로 나의 기하학/삼각법은 다소 흐릿하거나 존재하지 않는다. 끝내라?
또한 cocos2d 작업을 사용하지 않고이 작업을 수행하고 싶습니다. 이제는 게임의 일부로 시간 흐름을 조작하면서 현재 각 프레임마다 스프라이트를 이동하려고하므로 cocos2d 액션이 제공 할 수있는 것보다 더 많은 제어가 필요합니다.
미리 도움을 청하십시오.
약간의 변수로 혼란스러워합니다. kLaserSpeed는 거리/초 단위이어야합니다. dtSixty는 60Hz 클럭 속도의 델타 시간과 비슷합니까? xDiff가 화면 너비에 의존하는 이유는 무엇입니까? 이동 거리를 구하기 위해 속도 * dt를 곱하면 삼각형의 빗변을 따라 "d"라고 부르기 만하면됩니다. 그래서 dx = d * sin (각)과 dy = d * cos (각). 적절한 사인을 확인하십시오. – Pat
화면의 너비를 kLaserSpeed로 나누는 이유는 다른 장치 (iPhone 4/iPhone 5/ipad)에서 일정한 게임 플레이 경험을 제공하기 때문입니다. 예를 들어 kLaser 속도가 500이면 개체가 1/500 너비로 이동합니다 화면 크기에 관계없이 화면의 dtSixty는 마지막 프레임이 60을 곱한 이후의 시간입니다. 나는 원래 프레임 속도를 조정하지 않고 원래 프로젝트를 시작 했으므로, 나중에 60fps로 실행하고 싶었을 때 마지막 프레임 이후의 시간을 60으로 곱하면 같은 수치를 유지할 수있었습니다. 속도. – SteveB
나는 당신이 게임을하는 방정식을보고, 내가 작동하도록 할 수 있는지 알아 보겠다. 나는 내 삼각법을 조금 닦아 낼 수 있다고 생각한다! 도와 주셔서 감사합니다. – SteveB