使用方法
先下載腳本,放到 main
前。這個腳本會擴展 Sprite
,增加四個屬性:
** wave_amp **
波動的幅度,預設 0** wave_length **
波長,波長越長波峰數量越少。單位是像素,預設 72px** wave_speed **
波速,波速越高頻率越高,預設 720** wave_phase **
相位,單位為角度。在每次刷新時會不斷更新此屬性。
使用時直接對 Sprite
操作即可,例如:
sprite = Sprite.new |
Wave 效果
範例專案內的狼圖片:
此效果也應用到 回音 的扭曲空間中:
腳本實作方式
核心想法是將原始圖片切成許多橫條,用 sin
函式計算每個橫條的 X 位移量
。根據位移量移動每個橫條,再將所有橫條拼接起來,就可以產生波浪波動的感覺。
Pseudo code
# 每 1 pixel 切成一個橫條 |
快取機制
由於每一幀都要大量切割、拼接圖片。在圖片大的時候會造成很大的負擔,導致遊戲 Lag
。但實際上,由於 sin 正弦波
同樣的波形會不斷出現。因此很適合將計算完的圖片暫存住,重複利用,避免每次計算完就丟棄計算結果。程式中的實作也很簡單,只要拿 wave_phase
當 key
快取計算結果即可,例如:
def get_waved_bitmap |
原先在回音的扭曲空間中,遊戲非常的頓,FPS
降到只有 2x
。實作該快取機制後,遊戲變順暢許多, FPS
提升到接近 40
。