プログラミング未経験だけどゲームつくる - 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動画なので音はないですが、ちゃんとジャンプ音してますよ。
※画像の切り替えのみなのでジャンプしてる風っていうのが正確で、もしゲームになったとしても座標移動はしていないので当たり判定はないです。


次回は猫ちゃんを歩かせたいところですが、
クラスモジュール(?)を作って簡略化を目指したいと思います。


この記事が気に入ったらサポートをしてみませんか?