モジュール変数によるキャラクタの管理。#module ring x, z, r, v_x, v_z, a_z, ang, a_ang, life, r_inner
#const DIV_NUM 14 // リングの分割数
#const LIFE_MAX 500 // 寿命の初期値
// 初期化
#modinit int _x, int _z, double _r, int _v_x, double _v_z, double _a_ang
x = _x : z = _z : r = _r : r_inner = 0.8 * r
v_x = _v_x : v_z = _v_z : a_z = -2.0
ang = 0.0 : a_ang = _a_ang
life = LIFE_MAX
return
// リングを動かす
#modfunc move
v_z += a_z
x += v_x : z += v_z
if ( z < r ) {
z = r * 2 - z
v_z = -v_z * 0.9
}
life -= 5
ang += a_ang
return
// リングを描く
#modfunc draw
gmode GMODE_ALPHA, , , limit(life , 0, 200)
repeat DIV_NUM
hsvcolor cnt * 191 / DIV_NUM, 255, 255
c = 3.14 * 2 * cnt / DIV_NUM + ang
gs_x = x + r * cos( c ), x + r * cos( c + g ), x + r_inner * cos( c + g ), x + r_inner * cos( c )
gs_y = ginfo_winy - z - r * sin( c ), ginfo_winy - z - r * sin( c + g ), ginfo_winy - z - r_inner * sin( c + g ), ginfo_winy - z - r_inner * sin( c )
gsquare -1, gs_x, gs_y
loop
return life <= 0
#global
g@ring = ( 3.14 * 2.0 ) / ( DIV_NUM@ring + 3 )
dimtype mod_ring, 5, 20
onclick gosub *make_ring
title "click to create rings"
*main
redraw 0
color : boxf
foreach mod_ring
move mod_ring( cnt ) // リングを移動させる
draw mod_ring( cnt ) // リングを描く
if stat : delmod mod_ring( cnt ) // リングが寿命を迎えていたら削除
loop
redraw 1
wait 3
goto *main
*make_ring
switch iparam
case 0
newmod mod_ring, ring, 0, rnd( 100 ) + 150, 60 + rnd( 50 ), rnd( 5 ) + 3, 0.0, -0.1
swbreak
default
newmod mod_ring, ring, ginfo_winx, rnd( 100 ) + 150, 60 + rnd( 50 ), rnd( 5 ) - 7, 0.0, 0.1
swbreak
swend
return
2007年7月30日月曜日
弾むリング
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿