40行ほどのGMLで2Dplatformerの基礎部分
https://www.youtube.com/watch?v=IysShLIaosk
この動画が軽く2D Platformerにおけるシンプルな基礎実装の説明になってる
自前で gravity, hspeed, vspeed を用意し、place_meeting で衝突判定して pixel perfectに接地するように
こっちの公式チュートリアルでも、ほぼ同様に短いコードでプラットフォーマーの基礎を紹介
https://www.youtube.com/watch?v=2z4981CxFkw&list=PLhIbBGhnxj5J1viGhzQHBe8JrJm6aHWrM
code:gml
/// @desc Movement
// Get player inputs
key_left = keyboard_check(vk_left);
key_right = keyboard_check(vk_right);
key_jump = keyboard_check_pressed(vk_space);
// Calc movement
var _move = key_right - key_left;
hsp = _move * walksp;
vsp = vsp + grv;
if(place_meeting(x, y + 1, obj_wall) && key_jump){
vsp -= jumpsp;
}
// Horizontal collision
if(place_meeting(x + hsp, y, obj_wall)){
while(place_meeting(x + sign(hsp), y, obj_wall) == false){
x += sign(hsp);
}
hsp = 0;
}
x += hsp;
// Vertical collision
if(place_meeting(x, y + vsp, obj_wall)){
while(place_meeting(x, y + sign(vsp), obj_wall) == false){
y += sign(vsp);
}
vsp = 0;
}
y += vsp;
place_meeting で衝突判定を行うのが慣例っぽい
Jumpは、y 座標にマイナスを与えるのに注意。Unity と逆なので、毎度間違う