グラデーションスクエア2の続き。
グラデーションスクエア2 - 永字八法の続き。
http://www.eiji8pou.net/download/gradsquare2_20090929.zip
NScripterの側から、ある程度の操作ができるようにしてみました。
導入
まず、「gradsquare2.lua」が必須です。これを、「system.lua」の中から呼びだす必要があります。以下、system.luaに記述すべき内容。
--system.lua math.randomseed(os.time()) NL_dofile("gradsquare2.lua") NSExec('luasub animestart') function NSCOM_animestart() NSLuaAnimationMode(true) end NSExec('luasub animestop') function NSCOM_animestop() NSLuaAnimationMode(false) end NSExec('luasub animeinterval') function NSCOM_animeinterval() NSLuaAnimationInterval(NSPopInt()) end NSExec('luacall animation') function NSCALL_animation() gradsquare2.all_action() return true end
「gradsquare2.lua」を同じフォルダに置きます。
このsystem.luaの使い方
animestart ; アニメーションをスタートします。 animestop ; アニメーションをストップさせます。ただし、表示されているものをどうこうはしません。明示的に消す必要があります。 animeinterval 25 ; アニメーションの間隔を決めます。引数の数値と同じミリ秒間隔で一コマずつ動かしていきます。
ちなみに25ミリ秒は、秒間40コマ。40フレームと呼んでもいいでしょう。あんまり細かくしすぎても処理が重くなります。
今回のサンプルのような処理ならば、40ミリ秒(秒間25フレーム)や60ミリ秒(秒間約16フレーム)でもいいかも知れません。これぐらいでも、アニメと同じ程度の処理速度になります。
NScripter側の処理
; gradsquare (スプライト番号),(幅),(高さ),(赤要素の変化係数),(青要素の変化係数),(緑要素の変化係数) gradsquare 100,400,300,3,5,7 ; こんな感じで。 ; 第一引数で指定したスプライト番号をグラデーションアニメする四角にします。 ; 第二、第三引数で大きさを指定できます。 ; 第四引数以降は、変化係数です。大きくすればするほど、変化速度が遅くなります。 ; gradamsp (スプライト番号),(新しいx座標),(新しいy座標),(新しいアルファ値) gradamsp 100,400,0 ; amspのグラデーション版です。通常のamspでもエラーは出ませんが、有効ではありません。 ; gradsquareで使っていないスプライト番号を指定すると、エラーになります。 ; 第四引数は省略できます。 ; gradvsp (スプライト番号),(表示するなら1, 表示しないなら0) gradvsp 100,0 ; vspのグラデーション版です。通常のvspでもエラーは出ませんが、有効ではありません。 ; gradsquareで使っていないスプライト番号を指定すると、エラーになります。 ; gradcsp (スプライト番号) gradcsp 100 ; cspのグラデーション版です。通常のcspでもエラーは出ませんが、有効ではありません。 ; gradsquareで使っていないスプライト番号を指定すると、エラーになります。 ; -1指定は有効です。ただし、gradsquareで宣言したものだけです。
アニメーションをやめる方法は、gradcsp、gradvsp、animestopなどを使い分けてください。
細かい注意点
塗りつぶし長方形のシステムを使っているので、その制限を受けます。
たとえば、指定した幅が、(この場合)32の倍数になっていないときは、余りの部分が真っ黒になります。
幅が640、320、800の時はこれは問題になりませんが、400の時には、右側に16ドットの黒い帯が発生してしまいます。
また、gradsquareはセーブされません。gradsquareをしている最中にセーブし、再びロードした際には、gradsquareの設定はなくなっています。
loadgosubを使って、再現するようにしてください。animestart()を忘れずに。
思いついた小技
複数のgradsquareを作り、それぞれを半透明にして重ね合わせます。(いずれも色の変化度合はずらしておきます)そうすると、波打つようなグラデーションが観察できます。
既知のバグ
長時間グラデーションさせていると、数値がオーバーフローを起こす可能性があります。
多分、9日以上でエラー出すんじゃないかなあ。そこまでやるとは思わないけど。