<   2008年 06月 ( 6 )   > この月の画像一覧
「"(ダブルクォーテーション)」を文字変数に格納する方法
 「改行」を文字変数に格納する方法と同様の方法で、ダブルクォーテーションを文字変数に格納することができました。
 文字列を囲む時のダブルクォーテーションと混同されるんじゃないかと思ったのですが、意外と普通に扱えます。CSVで書き出すこともできますし、文字列との連結($0にダブルクォーテーションが入ってるとして、mov $0,$0 + "abc"とか)も可能です。

 いやー、readfile命令って結構使えますね。これでNScripterによるスクリプト自動生成が楽になります。今までは"の代わりに~を書いておいて、NScripterに生成させたあとでTeraPadを使って~→"に置換してました。たまに置換し忘れてNScripterに怒られたり。
[PR]
by lyricist_m | 2008-06-30 15:08 | NScripter
TeraPadからNScripterを起動する
 「TeraPadから直接NScripterを簡易実行させられる」とるしふぁさんから教えていただいたので、その方法を、書き残しておきます。

 1.バッチファイルを作成する
 TeraPadに直接NScripterをツールとして登録してもいいのですが、それだと1つのフォルダのスクリプトしか実行できないので、汎用性がありません。
 そこで、TeraPadとNScripterの間にバッチファイルを挟むことで、現在開いているスクリプトと同フォルダにあるnscr.exeを起動できるようになります。
 バッチファイルの内容ですが、自分は以下のようにしました。
@echo off
set NSCR_PATH="%~1\nscr.exe"
echo %NSCR_PATH%
%NSCR_PATH%

 \は半角円マークに脳内変換してください。
 バッチファイルの置き場所はTeraPadと同じ場所にしてます。他の場所にすると忘れてしまいそうで。

 2.バッチファイルをツールに登録する
 TeraPadのメニューからツール→ツールの設定と辿ってツールの設定ウィンドウを出したら、追加をクリックします。そして以下のように入力。
 名前:適当に。
 実行ファイル:バッチファイルをフルパスで指定。
 コマンドラインパラメータ:"%d"
 最低限これだけあればOKですが、あとキーも入れとくと一発で起動できて楽です。自分はAlt+Nにしてます。
[PR]
by lyricist_m | 2008-06-29 15:33 | NScripter
ボタン登録→画像削除→それでも定義は残ったまま
*define
game

*start
lsp 1,":s#FFFFFF■■■■■■■",0,0
spbtn 1,1
csp 1

*loop
btnwait2 %0
if %0 == 1 puttext "ひっと!@":textclear
goto *loop


 左上のあたりをクリックすると「ひっと!」と表示されます。
 ボタンの対象となる画像が削除されても、ボタン定義だけは残っているようですね。
[PR]
by lyricist_m | 2008-06-26 21:26 | NScripter
「改行」を文字変数に格納する方法
 改行コードを文字変数に格納する方法を思いついたので。
 まず、改行のみを記述したテキストファイルを用意します。右クリックで新規作成、テキストエディタで開いたら一回エンターを押して保存。名前はcrlf.txtとでもしておきましょう。これで準備はOKです。あとは作成したファイルをreadfileで読み込めば、文字変数に改行文字が代入されます。
readfile $0,"crlf.txt"
 こんな感じですね。
 で、これを使って、試しにスクリプトを書いてみました。

*define
game

*start
saveoff

readfile $10,"crlf.txt"
mid $10,$10,0,1
readfile $0,"00.txt"

mov $2,""
csvopen "test.txt","w"
*loop
mid $1,$0,0,1
if $1 == $10 csvwrite $2:len %0,$0:mid $0,$0,2,%0:mov $2,"":goto *loop
add $2,$1
len %0,$0
if %0 <= 0 mov %1,1:csvwrite $2:csvclose:end
mid $0,$0,1,%0
goto *loop


 00.txt(つまり実行中のスクリプトそのもの)を読み込み、そのまま出力するスクリプトです。テキストファイルから$1に1バイトずつ読み込んで改行文字の前半1バイトと比較、真ならCSVに出力して2バイト進め、偽なら$2に1バイト追加します。
 csvreadだと,(カンマ)でつまづきますが、readfileだと普通に読み込めます。まぁ、単に出力するだけならreadfile+csvwriteで済むのですが。
 これで何か面白いこと、できないかなぁ。


[6月27日追記]
 上記スクリプトのsplit版を作ってみました。
*define
game

*start
saveoff

readfile $10,"crlf.txt"
mid $10,$10,0,1
readfile $0,"00.txt"

csvopen "test.txt","w"
*loop
split $0,$10,$1,$2
csvwrite $1
if $2 == "" csvclose:end
len %0,$0
len %1,$1
mid $0,$0,%1 + 1,%0
goto *loop

 さすがにこっちの方がすっきりしてますね。
[PR]
by lyricist_m | 2008-06-24 14:44 | NScripter
グローバル変数とsaveoff
 saveoffしたあとでも、グローバル変数を弄ったら保存されます。
 saveoff=セーブ関連の動作を全くしない、というわけではないので注意。
[PR]
by lyricist_m | 2008-06-11 21:32 | NScripter
ドラッグで画像をぐりぐり
*define
numalias x,10
numalias y,11
numalias dX,12
numalias dY,13
numalias nowX,14
numalias nowY,15
game

*start
saveoff
print 1
mov %x,0
mov %y,0

*init
lsp 1,":s#FFFFFFあいうえお",%x,%y
itoa $x,%x
itoa $y,%y
caption $x + "," + $y
btndef clear
spbtn 1,1
btndown 1

*loop
btnwait %0
if %0 == 1 getmousepos %0,%1:mov %dx,%x - %0:mov %dy,%y - %1:goto *move
goto *loop

*move
wait 3
isdown %0
if %0 == 0 mov %x,%nowX:mov %y,%nowY:goto *init
getmousepos %0,%1
amsp 1,%0 + %dx,%1 + %dy
print 1
mov %nowX,%0 + %dx
mov %nowY,%1 + %dy
goto *move


「スプライトをどこに表示させよっかな……」って時に使えるスクリプト。
 lsp 1,":s#FFFFFFあいうえお",%x,%y
 の部分を変えれば任意の画像を動かせます。
 マウスでぐりぐり動かしてるだけで、けっこう楽しかったり。
[PR]
by lyricist_m | 2008-06-02 20:52 | NScripter