「HSPでSTGを作っていくblog」(kt.さん運営)のラスタースクロールに影響を受け、作成。
kt.さんの載せていらっしゃるスクリプトは動作も軽くループに組み込んでも問題ないのですが、こちらはかなり重いです。awaitを外しても変わらないほど。ひとつのネタとしてお楽しみください。
※この記事に限り転載・引用は禁止です。転載・引用可になりました。(2007/7/14)
※細部を修正。(2007/7/14)#define ctype round(%1) double(strf("%%0.0f", %1)) // 四捨五入(hspmathより抜粋)
#const CONST_A 0.2 // 定数その1。波長を決定付ける。
#const CONST_B 7 // 定数その2。屈折の程度を決定付ける。
buffer 1
onclick goto *start
*start
onclick 0
dialog "jpg;*.gif;*.bmp", 16
if stat == 0 : end
gsel 1 : picload refstr
sizeX = ginfo_winx
sizeY = ginfo_winy
centerX = ginfo_winx / 2
centerY = ginfo_winy / 2
screen 0, sizeX, sizeY, SCREEN_NORMAL
gcopy 1, 0, 0, sizeX, sizeY
gmode GMODE_MEM, 1, 1
title "変換中…"
redraw 0
boxf
repeat sizeY : targetY = cnt
repeat sizeX : targetX = cnt
pos targetX, targetY
// 中心から見た座標を算出。
dx = targetX - centerX
dy = targetY - centerY
// 中心から見た角度と距離を算出。
theta = atan(dy, dx)
dist = sqrt(dx * dx + dy * dy)
// ここがポイント。sinで屈折する距離を決めています。
// ラスタースクロールのスクリプトのほうが分かりやすいかもしれません。
copyX = centerX + round(cos(theta) * (dist + sin(dist * CONST_A) * CONST_B))
copyY = centerY + round(sin(theta) * (dist + sin(dist * CONST_A) * CONST_B))
gcopy 1, copyX, copyY
loop
await 10
loop
redraw 1
title "変換終了 - クリックで再開"
onclick 1
stop
2007年7月12日木曜日
波紋のエフェクト
登録:
コメントの投稿 (Atom)
2 件のコメント:
ellerさんのブログをRSSTickerに登録しました^^
おおっ、ありがとうございます。
そこそこの頻度で更新していければと思っていますので、今後もごゆるりとお付き合いくださいませ。
コメントを投稿