TeamworkCastが配信している、PICO-8のチュートリアル動画の解説を連載中です。
前回はこちら。
そして今回の動画はこちらです。
【今回の目標】
- フェードインの実装
- ボールの軌道アニメーションの実装
【解説】
まず、フェードインの実装から。
以前フェードアウトを実装したが、関数fadepal()の引数に与える数値を0から1へ 少しずつ大きくしていくことで、フェードアウトの効果を表現した。
フェードインはフェードアウトの逆のアニメーションなので、引数を逆に1から0へ少しずつ小さくしていくことで、実現できる。
フェードインのタイミングは、ゲームが始まる時にステージを表示する時に行うので、update_game()内に
if fadeperc~=0 then
fadeperc-=0.05
if fadeperc<0 then
fadeperc=0
end
end
を付け足し、fadepercが0出なかった場合(フェードアウトしたときは、1となっていている)実行され、フェードインが終わったらfadepercを0にすることで、ゲーム中のはじめに1回だけ実行される仕組みとなる。
update_start()とupdate_gameover()のフェードアウトが終わった時、fadepercに0を代入していたが、それを外す(消去)。
次は、ボールの軌道アニメーションの実装。
今までは、軌道をラインで示していたが、ドットを2つ表示させて、軌道上を移動させてアニメーションさせる。
doblink()関数内で、ドットの移動量の更新を行う。
arrmframe+=1
if arrmframe>30 then
arrmframe=0
end
arrm=1+(2*(arrmframe/30))
local af2=arrmframe+15
if af2>30 then
af2 = af2-30
end
arrm2=1+(2*(af2/30))
arrmとarrm2で2つのドットの移動量を代入している。
arrmframeは、基本となるカウンターで、1から始まり、1ずつ増えて、30より大きくなったら(31になったら)1に戻るを繰り返します。
そのarrmframeを元に、arrmを計算で導き出し、arrm2は、arrmframeに15を加えて15フレーム分ずらすようにしています(15を加えた時に30より大きくなった場合、30引きます)。
arrmとarrm2の数値が決まったら、draw_game()関数内で、2つのドットを表示します。
pset(ball[i].x+ball[i].dx*4*arrm,
ball[i].y+ball[i].dy*4*arrm,
10)
pset(ball[i].x+ball[i].dx*4*arrm2,
ball[i].y+ball[i].dy*4*arrm2,
10)
pset()関数で、ボールの座標+ボールの移動量×4×arrm(2)と計算することで、ある一定の軌道方向にドットがアニメーションで動くことになります。
コメント