<   2008年 07月 ( 7 )   > この月の画像一覧
循環バッファ
 循環バッファのサンプルをアップしました。Delusionist's Utopiaから落とせます。
 サンプル内で、循環バッファと以前アップした回想サンプルとを組み合わせてます。あくまでテストなのでNScripter本来の回想機能に頼っているところがありますが、頑張れば独自の回想機能を作れるはず。

 次はリンクリストを上げたいと思います。
[PR]
by lyricist_m | 2008-07-20 11:48 | NScripter
循環バッファとリンクリスト
 NScripterで循環バッファを実装してみました。大体テストは終わったので、実際の使用例をつけてから公開しますね。
 あと単方向リンクリストも実装中で、これはわりかし楽に終わりそうです。NScripterの変数が独特であるからこそ、できるようなものですが。
[PR]
by lyricist_m | 2008-07-18 15:19 | NScripter
特殊文字とstralias
 straliasの使い道 - 永字八法でご指摘、いただきました。
 straliasの存在をすっかり忘れていました! straliasを使うならファイル名をつける段階で工夫しといた方が楽よね、と気付いたので。
 実際に使用するときはstraliasで定数扱いしといた方がよさげですね。

readfile $0,"special_characters.txt"
mid $1,$0,0,2
stralias STR_CRLF,$1
mid $1,$0,2,1
stralias STR_QUOTE,$1


 こんなのを定義節に入れとくとよいと思います。special_characters.txtの中身は、改行の次にダブルクォーテーションが入ってると思ってください。
 自分はstraliasを使わないので、「straliasは文字定数にしか使わないよ!」って人はこういう使い方もありなのではないでしょうか。
[PR]
by lyricist_m | 2008-07-17 20:03 | NScripter
btndownとwindowerase
 マウスジェスチャーでsystemcall windoweraseをできるようにしようとしたところ、どうも上手くいかない。systemcall lookbackも同様。
 どうやらbtndownで押しっぱなしを取得しているせいで、「ウィンドウを消去する→マウスジェスチャー時のクリック検知→ウィンドウ復帰」という流れになってしまっているらしい。
 windoweraseの前にbtndown 0を挟んでみたりwaitを挟んでみたりしたが、効果なし。うーん、これはシステム的に無理か。

 以下、検証スクリプト。/は半角円マークに脳内変換してください。
*define
textgosub *textlb
game

*textlb
btndef clear
btndown 1
*textlb_btnwait
textbtnwait %0

if %0 == 0 systemcall windowerase
if %0 == -1 goto *textlb_end
goto *textlb_btnwait

*textlb_end
texec
saveon
return

*start

for %0 = 0 to 0 step 0
テスト\
next

[PR]
by lyricist_m | 2008-07-14 15:20 | NScripter
allsphideとallspresumeについて
 今まで使ったことの無かったallsphideとallspresumeを、試しに使ってみた。

*define
game

*start
lsp 0,":s#FFFFFFあいうえお",0,0
lsp 1,":s#FFFFFFかきくけこ",0,50
lsph 2,":s#FFFFFFさしすせそ",0,100
vsp 1,0
print 1
click

allsphide
print 1
click
allspresume
print 1
click
end


 上記スクリプトを実行してみればわかるが、つまりallsphide=現在のスプライトの状態に関わらず全スプライトを非表示にする命令、allspresume=全スプライトの状態を元に戻す命令、という解釈でいいようだ。
 おそらく内部的には1つのフラグが用意してあり、そのフラグが立っていればスプライトの描画処理をスキップする、ということになっているのだろう。allsphideでフラグを立て、allspresumeでフラグを戻すというわけだ。
 ちなみに拡張スプライト(allsp2hideとallsp2resume)でも同様に動作する。
[PR]
by lyricist_m | 2008-07-14 13:41 | NScripter
マウスジェスチャーサンプルをアップ
 マウスジェスチャーのサンプルをアップしました。右にある個人サイトへのリンクから飛んでください。
 ブログでやってたのと違い、クリック待ちの状態からマウスジェスチャーに移行できるようになっています。
 できればもうちょい凝りたかったんですが(ジェスチャーに対応するアクションの動的な変更とか)、余裕が無いのでとりあえずアップ。そのうち機能拡張します。気が向いたら。
[PR]
by lyricist_m | 2008-07-10 21:57 | NScripter
ループ実測
 for、goto、jumpb、skip、以上4種のループの実行時間を計測するスクリプトをDelusionist's UtopiaのNScripterにアップしました。
 詳しい内容はまた後ほど。

[7月8日追記]
 NScripterでは、主に4種類の手法で反復処理を行うことができます。それらの実行速度に違いはあるのか、実際に計測を行うことで確かめよう、というのが今回のスクリプトの趣旨です。
 計測対象のループは以下の4つになります。

・forループ
*loop_for
for %1 = 1 to max
next
return


・gotoループ
*loop_goto
mov %1,1
*loop
inc %1
if %1 <= max goto *loop
return


・jumpbループ
*loop_jumpb
mov %1,1
~
inc %1
if %1 <= max jumpb
return


・skipループ
*loop_skip
mov %1,1
inc %1
if %1 <= max skip -1
return


 純粋にループ処理にかかる時間を計測したいので、ループ中に特別な処理は挟んでいません。
 これらのループを一定回数(配布スクリプトでは100000回)繰り返し、ループに掛かった時間をgettimerで取得。さらに、ループ→実行時間取得を複数回(配布スクリプトでは10回)行ってその平均を取ることで、誤差をできるだけ少なくしています。
 以下、自分のPCでの計測結果など。

More
[PR]
by lyricist_m | 2008-07-07 18:04 | NScripter