Skip to content

Instantly share code, notes, and snippets.

@t-tutiya
Created November 30, 2016 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save t-tutiya/c5307db19ff562d3c16ae49cdb6cc21e to your computer and use it in GitHub Desktop.
Save t-tutiya/c5307db19ff562d3c16ae49cdb6cc21e to your computer and use it in GitHub Desktop.
_RESIZE_ width: 512, height: 512
#キャラの生成
_CREATE_ :Image, id: :main_char, width:32, height:32, color: C_RED, x:32, y:416, z:100
#マップデータ
MAP = [ [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 1],
[1, 0, 0, 1, 1, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 1],
[1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1],
[1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1],
[1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]]
#マップの表示
_CREATE_ :TileMap,
width: 1024, height: 1024, size_x: 16, size_y:16, map_array: MAP do
_SET_TILE_ 0, path: "./script/jump_action/blue.png"
_SET_TILE_ 1, path: "./script/jump_action/blown.png"
_SET_TILE_ 2, path: "./script/jump_action/white.png"
end
#自キャラにコマンドを送信する
_SEND_ :main_char do
#プロパティを動的に生成
_DEFINE_PROPERTY_ y_prev: 0, f: 1
state_normal #通常ステートに遷移
end
#通常ステート
_DEFINE_ :state_normal do
#スペースキー入力判定
_CHECK_INPUT_ key_push: K_SPACE do
_RETURN_ do
sate_jump #ジャンプステートに遷移
state_fall #落下ステートに遷移
end
end
#フレームを終了する
_END_FRAME_
_RETURN_ do
state_x_move #X方向移動ステートに遷移
state_fall #落下ステートに遷移
end
end
#X方向移動ステート
_DEFINE_ :state_x_move do
#横キー入力判定
_PAD_ARROW_ 0 do |x:, y:|
_GET_ [[:x,nil,:now_x]] do |now_x:|
#X方向の増分を加算
_SET_ x: now_x + x * 4
end
end
#壁衝突判定
_GET_ [:x, :y] do |x:, y:|
#壁衝突判定(左側)
if MAP[y/32][x/32] == 1 or MAP[(y+31)/32][x/32] == 1
_SET_ x: x/32*32 + 32
#壁衝突判定(右側)
elsif MAP[y/32][(x+31)/32] == 1 or MAP[(y+31)/32][(x+31)/32] == 1
_SET_ x: x/32*32
end
end
end
#ジャンプ開始ステート
_DEFINE_ :sate_jump do
#ジャンプ係数を初期化
_SET_ f: -15
_GET_ :y do |y:|
#前フレームのY座標を保存
_SET_ y_prev: y
end
end
#落下ステート
_DEFINE_ :state_fall do
_GET_ [:f, :y_prev, :y] do |f:, y_prev:, y:|
#前フレームのY座標を保存&ジャンプ係数の初期化
_SET_ f: 1, y_prev: y
#Y軸移動増分の設定
y_move = (y - y_prev) + f
#座標増分を加算。増分が31を越えていれば強制的に31とする
y += y_move <= 31 ? y_move : 31
#Y座標の更新
_SET_ y: y
end
#マップ外落下判定
_CHECK_ over: {y:480} do
_SET_ x: 32, y: 0, y_prev: 0
end
_GET_ [:x, :y] do |x:, y:|
#床衝突判定
if MAP[(y+31)/32][x/32] == 1 or MAP[(y+31)/32][(x+31)/32] == 1
#Y座標補正
_SET_ y: y/32*32
_RETURN_ do
state_normal #通常ステートに遷移
end
end
#天井衝突補正
if MAP[y/32][x/32] == 1 or MAP[y/32][(x+31)/32] == 1
_SET_ y: y/32*32 + 32
end
end
#フレームを終了する
_END_FRAME_
_RETURN_ do
state_x_move #X方向移動ステートに遷移
state_fall #落下ステートに再遷移
end
end
_WAIT_
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment