십자 방향 이동을 위한 선택 UI 설치
11396 단어 GameMakerStudio2UIselect
이번에는 GameMaker Studio2에 설치되어 있기 때문에 JS 스타일의 GML이라는 언어로 구현되었습니다.
특별한 기능을 거의 사용하지 않기 때문에 어떤 언어/게임 엔진이든 응용할 수 있다.
이 논리에서 다음 지시된 index 위치를 얻습니다
이를 토대로 그릴 페이지 수를 계산합니다.
// ここら辺はキーを押した判定のための変数です。
keyLeft = keyboard_check_pressed(ord("A")) || keyboard_check_pressed(vk_left);
keyRight = keyboard_check_pressed(ord("D")) || keyboard_check_pressed(vk_right);
keyUp = keyboard_check_pressed(ord("W")) || keyboard_check_pressed(vk_up);
keyDown = keyboard_check_pressed(ord("S")) || keyboard_check_pressed(vk_down);
keySpace = keyboard_check_pressed(vk_space);
pressX = keyRight - keyLeft;
pressY = keyDown - keyUp;
itemCount = array_length(selectList);
selectCount = selectIndex - startIndex;
posXY = [selectCount % 2, floor(selectCount / 2)]; // xy座標
// x軸
if(pressX != 0) {
selectIndex += pressX;
// 次のページが存在しない場合
if(selectIndex > itemCount - 1) selectIndex = 0;
// 前のページが存在しない場合
if(selectIndex < 0) selectIndex = itemCount - 1;
}
// y軸
if(pressY != 0 && itemCount > 2) {
var _prev = selectIndex;
var _nowPage = floor(_prev / 4);
selectIndex += pressY * 2;
// 次のページが存在しない場合
if(selectIndex > itemCount - 1) {
// アイテム数が奇数の場合かつ1つ前が存在すればそれを返す
if(itemCount % 2 == 1 && itemCount - 1 >= selectIndex - 1) {
selectIndex -= 1;
} else {
selectIndex = posXY[0];
}
}
// 前のページが存在しない場合
if(selectIndex < 0) {
// アイテム数が奇数の場合は最後尾を返す
if(itemCount % 2 == 1) {
selectIndex = itemCount - 1;
} else {
selectIndex = (itemCount - 1) - 1 + posXY[0];
}
}
}
// ページ位置計算
startIndex = floor((selectIndex) / 4) * 4;
그리고 다른 구성 요소startIndex(ページ位置の始まりのindex位置)
, selectIndex(現在洗濯中の項目のindex)
로 화면을 그리면 됩니다.선택한 항목은
item[selectIndex]
등으로 취득하면 된다.주안점
홀수 항목 주의
홀수 항목에 주의하면 짝수와 같이 Y축 방향(위 또는 아래)에서 이동할 수 없습니다.
// アイテム数が奇数の場合かつ1つ前が存在すればそれを返す
if(itemCount % 2 == 1 && itemCount - 1 >= selectIndex - 1) {
selectIndex -= 1;
} else {
selectIndex = posXY[0];
}
위에서 말한 것은 처음부터 되돌아올 때(위로 이동할 때), x 좌표를 0으로 조정하고 1은 모두 마지막 index를 나타낸다.나는 사용자가 자연스럽게 이 점을 느낄 것이라고 생각해서 실시했다.
아래로 이동한 상태에서 뒤로 물러난 2개의 앞부분도 존재한다면 이를 반납한다.
이렇게 하면 아래가 공백 상태에서도 위화감 없는 행동을 할 수 있다.
// アイテム数が奇数の場合かつ1つ前が存在すればそれを返す
if(itemCount % 2 == 1 && itemCount - 1 >= selectIndex - 1) {
selectIndex -= 1;
} else {
selectIndex = posXY[0];
}
총결산
사실 처음에는 '페이지 이동 여부' 를 첫 번째 지점으로 가져갔다
논리가 매우 복잡해졌지만 index 기준을 선택한 토대에서 팩스를 할 때 매우 간단하게 실현할 수 있다.
나는 이상한 형세가 나타날 때 관점과 논리의 근본 부분을 재검토하는 것이 매우 중요하다는 것을 다시 배웠다🐕
그리고 위 코드라면 매번 필요 없는 공정까지
나는 성능을 조정하려면 일부 함수화를 조정해서 되돌려야 한다고 생각한다...!(이번엔 게으름을 피웠다)
Reference
이 문제에 관하여(십자 방향 이동을 위한 선택 UI 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/irico/items/598d1233591144ed639d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)