プログラミング未経験だけどゲームつくる - 2 : キャラクターが飛ぶ【LOVE2d】
こんばんは、サトウダイスケです。
猫ちゃんがジャンプするようになりました。
たぶんルール作ることで簡略化できるんだと思うけど、
変数たくさん作って無理やりジャンプしてもらいました。
local cat
local cat_walk
local cat_jump
local cat_now
local walk_fps = 4
local walk_num_frames = 2
local walk_xoffset
local walk_anim_timer = 1 / walk_fps
local walk_frame = 1
local jump_fps = 8
local jump_num_frames = 10
local jump_xoffset
local jump_anim_timer = 1 / jump_fps
local jump_frame = 1
local snd
function love.load()
love.graphics.setBackgroundColor( 256, 256, 256 )
love.graphics.setDefaultFilter('nearest', 'nearest')
cat = love.graphics.newImage('images/neko_for_sprite.png')
cat_walk = love.graphics.newQuad(0, 0, 16, 16, cat:getDimensions())
cat_jump = love.graphics.newQuad(0, 0, 16, 16, cat:getDimensions())
cat_now = cat_walk
snd = love.audio.newSource("sound/jump06.wav", "static")
end
function love.update(dt)
if dt > 0.035 then return end
if cat_now == cat_walk then
walk_anim_timer = walk_anim_timer - dt
if walk_anim_timer <= 0 then
walk_anim_timer = 1 / walk_fps
walk_frame = walk_frame + 1
if walk_frame > walk_num_frames then walk_frame = 1 end
walk_xoffset = 16 * walk_frame
cat_walk:setViewport(walk_xoffset-16, 0, 16, 16)
end
end
if cat_now == cat_jump then
jump_anim_timer = jump_anim_timer - dt
if jump_anim_timer <= 0 then
jump_anim_timer = 1 / jump_fps
jump_frame = jump_frame + 1
if jump_frame > jump_num_frames then
jump_frame = 1
cat_now = cat_walk
end
jump_xoffset = 16 * jump_frame
cat_jump:setViewport(jump_xoffset-16, 0, 16, 16)
end
end
end
function love.draw()
love.graphics.draw(cat, cat_now, 640/2-6*16/2, 100, 0, 6, 6)
end
function love.keypressed(key, scancode, isrepeat)
if cat_now == cat_walk then
if key == "space" then
love.audio.stop(snd)
love.audio.play(snd)
cat_now = cat_jump
end
end
end
使った画像は前回のものにコマを足したものです。
cat_walkの状態では、1,2コマを繰り返します。
cat_jumpの状態では1~10コマを1度だけ描写します。
猫の状態はcat_nowがcat_walkなのかcat_jumpなのかで判断しています。
また、cat_nowの中身次第で処理を変えています。
function love.keypressed(key, scancode, isrepeat)
if cat_now == cat_walk then
if key == "space" then
love.audio.stop(snd)
love.audio.play(snd)
cat_now = cat_jump
end
end
end
こことかは、cat_nowがcat_jumpの場合はジャンプ禁止になってます。
love.audio.stop(snd)
そういう意味だとこれは要らないことに気づく。
また、spaceキーが押されたときにジャンプするようになってます。
効果音は、
小森平さんのウェブサイトからお借りしたjump06です。
GIF動画なので音はないですが、ちゃんとジャンプ音してますよ。
※画像の切り替えのみなのでジャンプしてる風っていうのが正確で、もしゲームになったとしても座標移動はしていないので当たり判定はないです。
次回は猫ちゃんを歩かせたいところですが、
クラスモジュール(?)を作って簡略化を目指したいと思います。
この記事が気に入ったらサポートをしてみませんか?