【36】いっしょにまなぼう

Breakout #36 - Better Arrows - Pico-8 Hero PICO-8
Breakout #36 - Better Arrows - Pico-8 Hero

 TeamworkCastが配信している、PICO-8のチュートリアル動画の解説を連載中です。

前回はこちら

そして今回の動画はこちらです。

Breakout #36 – Better Arrows – Pico-8 Hero

【今回の目標】

  • フェードインの実装
  • ボールの軌道アニメーションの実装

【解説】

まず、フェードインの実装から。

以前フェードアウトを実装したが、関数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)と計算することで、ある一定の軌道方向にドットがアニメーションで動くことになります。

軌道アニメーション
軌道アニメーション

コメント

タイトルとURLをコピーしました