Nscripterスプライト速度

しばらくぶりにNscripter技術情報なんぞを。

Nscripterのスプライト処理速度がWINDOWS2000とXPで、もの凄く違います。
私がメインに使っているのはWIN2000で、結構古いパソなんですな。(自作PⅢ800)
これでスプライト処理のタイミング調整をするものですから、XPで見ているお客さんが凄いことに(^^;
カットイン系などの処理がもの凄い速度で動きます。
DI版で致命的だったのが、エンディングロールでして……。もの凄い速度であっという間に終わるらしいです。
orz
半身版はXPで見て調節しますぜ……。

以下は森皿さんが組んだ可変スプライト移動調整スクリプト。久々に解説してみましょう。

----------------------------------------
*s_inu

dwave 1,"inu02.wav";犬の鳴き声WAVファイル

BG #FF0000,1;背景真っ赤

lsp 0,":1/6,60,0;inu.bmp",-200,300;つまり、犬絵の初期値はX座標-200という事。ちなみに左ピクセル色マスクの六コマ60ミリアニメスプライトです。

;ループで使用している変数は以下の通り
;%0 :現在時 ,%4 :ステップ数 ,%3 :ウエイト判定値 ,%5:スプライトのX値

;ループ用の値を初期化
resettimer ;内部タイマーリセット
mov %4,0 ;ループステップ(繰り返し回数)数初期化

;==========ループ開始=========
*inu000
gettimer %0 ;現在時値(ミリ秒)を内部タイマーから取得、変数%0に代入されます①
mov %3,%4*15 ;ウエイト判定値%3に、ステップ数%4× ウエイト値[15]を代入②
if %0 <= %3 waittimer %3 ;もしも「現在時値%0」よりも「ウエイト判定値%3」が大きいか同じ場合 waittimerの値を「ウエイト判定値%3」とする。(waittimer=内部タイマが数字と等しくなるか超えるまで待ちます)③
mov %5,%4*10-200 ;スプライトのX値に、ステップ数%4×10、-200(犬の出発点がX座標200のため)④
amsp 0,%5,300,255 ;スプライト移動命令、X値に変数%5が入ってる事に注意⑤
print 1 ;スプライトを瞬間表示で書き直し。(スプライトは書き直さないと表示されませぬ)
inc %4 ;ステップ数%4に1を加算⑥
wait 1 ;保険用のウェイト⑦
if %4<90 goto *inu000 ;step 90より小さいときループ(90の数値を変える事が可能)⑧
;==========ループ終了==========
----------------------------------------------

処理の流れ説明
①現在のパソコン内部のタイマー値(ミリ秒)を所得
②一回目の%4の値が0なので一回目は無条件スルー、二回目は⑥で1を代入されているので値は15、三周目は2を代入されているので30、以降、45、60と15刻みで加算されていきます。(ここの単位はミリ秒)
③①での数値と②の数値を比べて、②が大きかった場合、内部タイマーがその数値に進むまで処理待ちをします。つまり、早い機械(タイマー数値が少ない)が、わーーーっと進むのをここで止めて調整するわけですな。(ここの単位はミリ秒)
④スプライトのX座標算出です。ステップ数に10を掛けて、そこから200をひきます。犬スプライトの出発が-200(画面外)から10刻みで右方向に移動していきます。(ここの単位はピクセル)
⑤スプライト移動命令、amsp(アブソリュートムーブスプライト)です。画面の絶対座標で移動させます。書式:amsp スプライト番号,X座標,Y座標,透過度
⑥ステップ数%4(回数)に1を加算
⑦ウエイト無しだと動かない時があるので、保険用のウエイト(ミリ秒)
⑧ループ処理部、ステップ数%4(回数)が90より小さかったら、ラベル*inu000に移動する。平たく言うと90ステップ終わるまで処理を繰り返せということですな。

上記スプリクトセットはこちら>>ペスを走らせて楽しんでください。

b0043794_212463.gif

[PR]
by sakananovel | 2005-10-07 02:14 | 同人ゲーム製作


<< 吹雪はいつやむのか フローライトさんの「兄妹同棲」... >>