오브젝트 <O_player>
===========================================================================================
이벤트 {Create}:
===========================================================================================
grav, g_dir chrlghk
jump, jump_opp, j_min, j_max, j_delay 초기화
mspd, s_friction 초기화
g_spd, _delayt, _jumpt, _spd초기화
ground 초기화
{Step}:
임시 변수 glen, tlen 선언 및 초기화
#region <Jump>
-----------------------------------------------------------------------------------------
만일 jump!=0이고 _delayt!=-1이면{
만일 vk_space 키보드가 체크될 시{
_delayt 값 추가
_jumpt = lerp(j_min, j_max, _delayt/j_delay)
만일 _delayt = j_delay 이면 {
_delayt 값 재설정
}
만일 스페이스가 떼어질 시 {
_delayt를 재설정
}
}
아니면 만일 (jump <= (jump_opp-1)이고 키보드가 눌릴 시(vk_space)
{
jump값 추가
_jumpt를 j_min으로 재설정
_delayt 초기화
} g_spd 초기화
만일 (_jumpt > g_spd) {
만일 ~가 아닐시 (x + lengthdir_x(-_jumpt, g_dir),
y+lengthdir_y(-_jumpt, g_dir)의 위치가 빈 경우
{
g_spd 초기화
_jumpt 초기화
_delayt는 재설정
솔리드 컨택 이동 함수(g_dir + 180 방향(*g_dir의 반대방향)으로, -1(*최대거리 파라미터))
}
}
만일 vk_down이 눌리고 ground!=-1이면 {
임시 변수 _index 선언 및 초기화
만약 _index가 o_block2, o_block3, o_block4가 아닐시
{ y 값 이동}
}
g_spd는 grav만큼 추가
tlen은 - (점프가 0이 아닌지 여부) * _jumpt + g_spd;
만일 x, y에서 tlen만큼 g_dir방향으로의 간격에 위치가 비어있을 시
{
x값 추가
y값 추가
ground 값 초기화
}
아니면 {솔리드 컨택이동함수( g_dir, -1)}
만일 x,y에서 g_dir방향으로 1만큼의 거리에
p_block이란 obj이 없을 시가 아니면 {
임시 inst = instance_place(체크위치x, 체크된 y, p_block)
만일 inst값이 noone이 아니면
{
만일 inst가 solid일시
{ground는 inst}
아니면
{ground 초기화(*이 경우 초기 값으로 되돌아감을 글자 압축 관계상 초기화라고 지칭.)}
}
만일 ground가 -1이 아니면 {
jump, g_spd, _jumpt 초기화(*마찬가지)
만일 ceil(x), y의 위치가 비어 있지 않으면 {x 값 재설정}
만일 x, ceil(y)의 `` `` `` `` {y 값 재설정}
만일 floor(x), y의 `` `` `` `` {x 값 재설정}
만일 x, floor(y)의 `` `` `` `` {y 값 재설정}
}
}
만일 엔터가 눌렸을 시
{g_dir 값 추가}
------------------------------------------------------------------------------------------
# end region
# region <Move>
------------------------------------------------------------------------------------------
만일 (( - 키보드 체크(vk_left)+키보드 체크(vk_right)이 0이 아니면)
{ spd는 ( `` + `` ) * mspd; }
만일 (_spd < 0)이면 _spd는 (_spd + s_friction과 0중 최소값)
아니면 _spd > 0 일 때 _spd는 (_spd - s_friction, 0 중 최댓값)
if (x,y)에서 g_dir+90 방향으로 _spd만큼의 거리의 위치가 빌 시
{
x 값 추가
y 값 추가
}
아니면
{ 솔리드컨택이동 ( g_dir+90*sign(_spd), abs(_spd));}
------------------------------------------------------------------------------------------
#end region
리뷰한 소스 원 링크: https://cafe.naver.com/crazygm
'My review > 코드 리뷰 [GML]' 카테고리의 다른 글
| GML 리뷰의 원칙 (0) | 2022.03.19 |
|---|