オブジェクトは二つ必要で、落下する方のオブジェクトにだけ動作定義します。
Create と Step の各イベントから対応した関数を呼び出してください。
地面として配置するオブジェクトはイベントの定義は一切いらないけれど、Object の Properties から「Solid」にだけチェックを入れてください。衝突判定に必要な設定。あとオブジェクトのリソース名は「wall」。
Create イベント用(必要な初期化処理、インスタンス変数の宣言)
///Init_SimplePhy_FreeFall(val); /* Init_SimplePhy_FreeFall(0.5); */ InitGrav = argument0; // Set Default Gravity gravity = InitGrav; //solid = !solid; // if "solid" is false it is changed to true
Step イベント用(重力処理と 1 pixel 単位の衝突判定)
///Step_SimplePhy_CheckCollide(); /* "Check Collide With Solids" Step_SimplePhy_CheckCollide(); */ if (vspeed > 0 and !place_free(x, y+vspeed)) { for (var i=0; i<vspeed; i++) { var cy = y + i + 1; if place_free(x, cy) { gravity = InitGrav; } else { gravity = 0; vspeed = 0; y = cy - 1; break; }; }; };
Step イベント用(ジャンプ)
///Step_SimplePhy_Jump(key, vspeed_value); /* Step_SimplePhy_Jump(vk_space, 10); */ if keyboard_check(argument0) or gamepad_button_check(0, gp_face1) { if place_meeting(x, y+1, wall) // all <<-->> "wall" { vspeed = -argument1; gravity = InitGrav; } };