안녕하세요. 승승이입니다.
이번에는 엔트리 경사 물리 구현하는 코드를 간단? 하게 설명하겠습니다.
일단 제가 테스트용으로 만든 예제 프로젝트에서 구현하는 방법에 대한 간단 설명을 드리겠습니다.
오브젝트는
먼저 장애물이란 오브젝트가 있는데, 이것은 그냥 지형일 뿐입니다.
모양은 보다시피 경사로를 테스트할 수 있는 그림으로 되어 있습니다.
코딩도 단순하게 화면에 따라 움직이게 되어 있는데, 현재 스크롤 테스트중이었으니.. 이 코드는 무시하셔도 좋습니다.
다음은 센서입니다.
센서는 작은 조각으로 되어 있습니다.
시작하면 8번 복제를 합니다.
복제를 한 녀석은 본체에 약간 바깥에 위치하면서 경사로를 인식하도록 되어 있습니다.
12시 방향부터 센서 번호는 1, 2, 3... 7, 8번으로 되어 있습니다.
이 프로젝트의 핵심입니다.
처음에 복제가 되면 캐릭터의 위치에서 시계방향으로 8개의 센서가 부착됩니다.
물론 모든 센서가 사용되지 않고, 경사로를 인식하기 위한 몇개의 센서만 사용하게 됩니다.
그러나 만약을 위해서 8방향을 모두 부착하였습니다 ㅎㅎ
이동을 한 다음에는 장애물을 인식했냐에 따라서 '센서' 리스트의 자신의 항목 값을 1로 바꿔주고, 아니면 0으로 바꿔줌으로써 센서의 역할을 끝납니다.
다음은 캐릭터 입니다.
캐릭터는 렉 개선을 위해서 루프를 3개를 가지고 있는 상태입니다.
하나로 하니까 렉이 좀 생겨서.. 분리시켰더니 좀 낫더라구요. 그래서 무한루프별로 간단하게 코딩을 설명드립니다.
첫번째 루프는 이동입니다. 좌우는 x속도를 결정하고, 위를 누르면 점프를 하도록 되어 있습니다.
정말 간단하고 정석적인 코드입니다.
두번째 코드는 좀 기네요. 기울어진 장애물을 인식하기 위한 코드입니다.
간단히 될 줄 알았는데 생각보다 길어지고 복잡해졌습니다 ㅠㅠ
먼저 정지중에서 센서가 4번과 6번 중 어느 하나에 닿았는가에 따라서 경사로를 판단합니다.
4번과 6번은 바로 앞에서 아래쪽 바닥을 탐지하는 녀석입니다. 하나만 탐지가 된다면 경사로라고 생각할 수 있습니다.
예를들어 4번만이 장애물이 탐지되면 위와 같이 생각할 수 있는 것입니다. 그러면 거꾸로 뒤로 후진되는 것으로 만들어 주었습니다.
다음은 앞으로 간 다음에 경사로를 탐지합니다.
경사로가 맞다면 (예를들어 2번은 0, 3번은1) 위로 살짝 올려줘서 경사로를 위로 올라갈 수 있도록 합니다.
2번과 3번이 동시에 1이라면 더이상 갈수 없는 벽으로 인식하여 후퇴시킵니다.
왼쪽으로 이동의 경우 센서의 번호를 바꾸고 동일하게 동작합니다.
다음은 바닥면 인식입니다.
위의 코드에서는 천장 인식을 안넣었네요 ㅎㅎ;; 나중에 따로 넣어줘야 겠습니다.
어쨋든 바닥 인식으로써, 바닥임을 확인하면 y속도는 0이 되고 점프를 가능하게 합니다.
마지막으로 x, y 변수를 자신의 좌표값으로 바꿔주도록 되어 있는데, 이 값으로 센서의 위치를 정하였기 때문입니다.
마지막 루프는 현재 '스크롤링'이 들어가 있어서... 사실 경사로 인식에 필요없는 부분이기 때문에 대충 설명하겠습니다.
특정 좌표값이 넘어가면 후퇴시키고, 화면 좌표값을 그만큼 변경합니다.
캐릭터 외의 배경들은 화면의 좌표값만큼 후퇴시키면 간단히 스크롤링이 완성됩니다.
경사로에 따라 미끄러지거나 올라갈 수 있습니다.
그러나 부드럽게 못올라가는 모습을 보이기도 하는데, 정말 제대로 부드럽게 움직이려면 ~에 닿는가 대신 좌표값과 블록의 성질을 사용해야 할거 같네요. 다른 방법으로의 경사로 물리 엔진을 다음에 다시 만들어 보기로 합니다 ^^
코드보기:
'엔트리 > 엔트리 중급' 카테고리의 다른 글
초간단 오목 만들기 (2차원 배열 데이터 활용) (1) | 2020.05.09 |
---|---|
데이터 분석 기능을 이용한 2차원 배열 활용 (3x3 도트매트릭스) (0) | 2020.05.07 |
엔트리 초간단 실시간 채팅창 만들기 (0) | 2020.04.24 |
엔트리 빨리 그리기 팁(재귀함수) (2) | 2019.12.10 |
댓글