Hatena::ブログ(Diary)

永字八法 RSSフィード Twitter

 | 

2012-10-31 Wednesday

2012-10-30 (sub)


Powered by twtr2src

2012年10月30日のツイート

2012-10-30 (sub)


Powered by twtr2src

2012年10月30日のツイート

2012-10-30 (sub)


Powered by twtr2src

2012年10月30日のツイート

2012-10-30 Tuesday

2012-10-29 (sub)


Powered by twtr2src

2012年10月29日のツイート

2012-10-29 (sub)


Powered by twtr2src

2012年10月29日のツイート

2012-10-29 (sub)


Powered by twtr2src

2012年10月29日のツイート

2012-10-29 Monday

2012-10-28 (sub)


Powered by twtr2src

2012年10月28日のツイート

2012-10-28 (sub)


Powered by twtr2src

2012年10月28日のツイート

2012-10-28 (sub)


Powered by twtr2src

2012年10月28日のツイート

2012-10-28 Sunday

2012-10-27 (sub)


Powered by twtr2src

2012年10月27日のツイート

2012-10-27 (sub)


Powered by twtr2src

2012年10月27日のツイート

2012-10-27 (sub)


Powered by twtr2src

2012年10月27日のツイート

2012-10-27 Saturday

2012-10-26 (sub)


Powered by twtr2src

2012年10月26日のツイート

2012-10-26 (sub)


Powered by twtr2src

2012年10月26日のツイート

2012-10-26 (sub)


Powered by twtr2src

2012年10月26日のツイート

2012-10-26 Friday

2012-10-25 (sub)


Powered by twtr2src

2012年10月25日のツイート

2012-10-25 (sub)


Powered by twtr2src

2012年10月25日のツイート

2012-10-25 (sub)


Powered by twtr2src

2012年10月25日のツイート

2012-10-25 Thursday

2012-10-24 (sub)


Powered by twtr2src

2012年10月24日のツイート

2012-10-24 (sub)


Powered by twtr2src

2012年10月24日のツイート

2012-10-24 (sub)


Powered by twtr2src

2012年10月24日のツイート

2012-10-24 Wednesday

画面サイズについて

デフォルトでは、800*600に設定されている。
この部分はSGEの頃から変わらず、root.lua中の記述に従う。
root.luaのほぼ先頭に、

gui.create(800,600)

と言う記述があり、まさにそれである
まあ、将来的にスマフォとかタブレットにNScripter2が移植されるようなことがあれば、ここをいじって縦置き画面構成にして開発することも有り得なくもないだろう。
それに、800*600と言うのもそろそろ業界的には「小さい」のではないかと思われる。
で、このgui.create()を記述すると画面が生成され、スプライトシステムが使えるようになるのだが、逆に記述しなければNScripter2はコンソールは愚かタスクバーにも出ない隠れアプリとして動作する。(コンソール出てると言う指摘はごもっとも。だが、あれはos.execute()によって発生したコンソールなので、NScripter2のものではない。)もっとも、この状態だと独自機能はほとんど使えず、luaネイティブ操作しかできないが。

lock.singleton()

lock.singleton()

記述すれば、同じディレクトリ中でのNScripter2の同時起動を妨げる動作をする。

root.lua
lock.singleton()
os.execute("nscr2.exe")

二重起動できない旨のメッセージが出て止まる。
そこで、lock.singleton引数関数を与えると、二重起動した時にその関数が実行される。
その関数の実行が終了すると、二重起動がなかったかのようにlock.singletonを抜けてしまう。

lock.singleton(function() end) -- たとえば空関数を与えると
os.execute("nscr2.exe") -- 無限に窓が開き続ける無限ループになってしまう。

※上記スクリプトは実行しないこと。無限ループだ!
なので、lock.singletonに与える関数には、os.exit()を含ませるのがセオリーとなる。

lock.singleton(function() os.exit() end) -- これで安心。
os.execute("nscr2.exe") -- 一回自己起動するだけ。

で、lock.singleton用途としては、普通に二重起動を妨げる他は、二重起動した際には違う動作をするアプリとして動かすことが(理論上は)可能になる点だ。
過去、僅かながらテキストウィンドウ文字通り別窓表示したエロゲーもあったそうだが、まあ、それが再現できたからと言って「だからなに」かも知れない。
普通に考えたら、二重起動の注意メッセージオサレものにしたり、キャラクターに二重起動禁止をしゃべらせる演出をしたり、そんな程度だろうか。

2012年10月23日のツイート

画面サイズについて

デフォルトでは、800*600に設定されている。
この部分はSGEの頃から変わらず、root.lua中の記述に従う。
root.luaのほぼ先頭に、

gui.create(800,600)

と言う記述があり、まさにそれである
まあ、将来的にスマフォとかタブレットにNScripter2が移植されるようなことがあれば、ここをいじって縦置き画面構成にして開発することも有り得なくもないだろう。
それに、800*600と言うのもそろそろ業界的には「小さい」のではないかと思われる。
で、このgui.create()を記述すると画面が生成され、スプライトシステムが使えるようになるのだが、逆に記述しなければNScripter2はコンソールは愚かタスクバーにも出ない隠れアプリとして動作する。(コンソール出てると言う指摘はごもっとも。だが、あれはos.execute()によって発生したコンソールなので、NScripter2のものではない。)もっとも、この状態だと独自機能はほとんど使えず、luaネイティブ操作しかできないが。

lock.singleton()

lock.singleton()

記述すれば、同じディレクトリ中でのNScripter2の同時起動を妨げる動作をする。

root.lua
lock.singleton()
os.execute("nscr2.exe")

二重起動できない旨のメッセージが出て止まる。
そこで、lock.singleton引数関数を与えると、二重起動した時にその関数が実行される。
その関数の実行が終了すると、二重起動がなかったかのようにlock.singletonを抜けてしまう。

lock.singleton(function() end) -- たとえば空関数を与えると
os.execute("nscr2.exe") -- 無限に窓が開き続ける無限ループになってしまう。

※上記スクリプトは実行しないこと。無限ループだ!
なので、lock.singletonに与える関数には、os.exit()を含ませるのがセオリーとなる。

lock.singleton(function() os.exit() end) -- これで安心。
os.execute("nscr2.exe") -- 一回自己起動するだけ。

で、lock.singleton用途としては、普通に二重起動を妨げる他は、二重起動した際には違う動作をするアプリとして動かすことが(理論上は)可能になる点だ。
過去、僅かながらテキストウィンドウ文字通り別窓表示したエロゲーもあったそうだが、まあ、それが再現できたからと言って「だからなに」かも知れない。
普通に考えたら、二重起動の注意メッセージオサレものにしたり、キャラクターに二重起動禁止をしゃべらせる演出をしたり、そんな程度だろうか。

2012年10月23日のツイート

画面サイズについて

デフォルトでは、800*600に設定されている。
この部分はSGEの頃から変わらず、root.lua中の記述に従う。
root.luaのほぼ先頭に、

gui.create(800,600)

と言う記述があり、まさにそれである
まあ、将来的にスマフォとかタブレットにNScripter2が移植されるようなことがあれば、ここをいじって縦置き画面構成にして開発することも有り得なくもないだろう。
それに、800*600と言うのもそろそろ業界的には「小さい」のではないかと思われる。
で、このgui.create()を記述すると画面が生成され、スプライトシステムが使えるようになるのだが、逆に記述しなければNScripter2はコンソールは愚かタスクバーにも出ない隠れアプリとして動作する。(コンソール出てると言う指摘はごもっとも。だが、あれはos.execute()によって発生したコンソールなので、NScripter2のものではない。)もっとも、この状態だと独自機能はほとんど使えず、luaネイティブ操作しかできないが。

lock.singleton()

lock.singleton()

記述すれば、同じディレクトリ中でのNScripter2の同時起動を妨げる動作をする。

root.lua
lock.singleton()
os.execute("nscr2.exe")

二重起動できない旨のメッセージが出て止まる。
そこで、lock.singleton引数関数を与えると、二重起動した時にその関数が実行される。
その関数の実行が終了すると、二重起動がなかったかのようにlock.singletonを抜けてしまう。

lock.singleton(function() end) -- たとえば空関数を与えると
os.execute("nscr2.exe") -- 無限に窓が開き続ける無限ループになってしまう。

※上記スクリプトは実行しないこと。無限ループだ!
なので、lock.singletonに与える関数には、os.exit()を含ませるのがセオリーとなる。

lock.singleton(function() os.exit() end) -- これで安心。
os.execute("nscr2.exe") -- 一回自己起動するだけ。

で、lock.singleton用途としては、普通に二重起動を妨げる他は、二重起動した際には違う動作をするアプリとして動かすことが(理論上は)可能になる点だ。
過去、僅かながらテキストウィンドウ文字通り別窓表示したエロゲーもあったそうだが、まあ、それが再現できたからと言って「だからなに」かも知れない。
普通に考えたら、二重起動の注意メッセージオサレものにしたり、キャラクターに二重起動禁止をしゃべらせる演出をしたり、そんな程度だろうか。

2012年10月23日のツイート

2012-10-23 Tuesday

2012年10月22日のツイート

2012年10月22日のツイート

2012年10月22日のツイート

2012-10-22 Monday

2012-10-21 (sub)


Powered by twtr2src

2012年10月21日のツイート

2012-10-21 (sub)


Powered by twtr2src

2012年10月21日のツイート

2012-10-21 (sub)


Powered by twtr2src

2012年10月21日のツイート

2012-10-21 Sunday

2012-10-20 (sub)


Powered by twtr2src

2012年10月20日のツイート

2012-10-20 (sub)


Powered by twtr2src

2012年10月20日のツイート

2012-10-20 (sub)


Powered by twtr2src

2012年10月20日のツイート

2012-10-20 Saturday

2012-10-19 (sub)


Powered by twtr2src

SP仕様確認とアニメーション処理の基礎

NScripter比較して、通常スプライト拡張スプライトをごっちゃにして扱えるようになった。これは進歩

最低限の記述

sp "sprite",{name="sprite.png"}

省略した場合の各種値は以下のようになる。

x
0
y
0
z
0
a
255
cell
0
cellnum
nameの指定による。
w
スプライトによる
h
スプライトによる
animtype
""
animtime
0
blend
0
visible
1
rot
0

通常スプライト拡張スプライト判別

もし、与えられたオプションの中にxがあれば、通常スプライトになる。
そうでなければ、cxの有無を調べ、あれば拡張スプライトになる。
さもなければ、やはり通常スプライトになる。

余分なパラメータ

通常スプライトでもrotなどを指定してもエラーにはならない。(反映はされないが)

整数パラメータ

xやyに非整数を与えてもエラーにはならない。与えられた値はそのまま保持して、getspinfoで取得できる。
実際の画面では四捨五入っぽい演算がなされた数値で処理される。
zに非整数を与えても問題はない。

zの扱い

マイナスも普通に受け付けて、値が少ないほど画面手前に来る。
同じz値を持つスプライト複数あると、一つを除いて他は表示されなくなる。どれが表示されなくなるかは判然としない。マニュアルに載せる文言としては「保証しない」くらいだろう。
0.1でもずれていれば大丈夫なので、きちんと管理すること。

alphaの扱い。

設定した数値はそのまま保存される。
端数は受け付けるが効果があるかは不明
255を越えたら255扱いになり、0で完全に透明。
マイナスも受け付けるが効果のほどは「保証しない」だろう。

通常スプライト拡張スプライトの切り替え

SPMOVELT命令スプライトを動かせば、そのスプライト自動的拡張スプライトになる。
逆にSPMOVE命令スプライトを動かせば、そのスプライト自動的に通常スプライトになる。

アニメーション処理

今回のスプライトのもう一つの革命拡張は、アニメーションパターンを自前で作成できるようになったことだと思う。
animtimeが0以外の数値であれば、それはアニメーションの設定されたスプライト判断される。
ここで、animtypeが

""
セル番号を増やしていって、限界数を越えたら最初に戻る。
"normal"
""と同じ。
"round"
最初は増えて、限界に達したら今度は逆にセル番号を減らし、0になったらまたプラスに転じる。(今現在どちらになっているかは、%info.animvecを調査すればわかる)
"stop"
増えていき、限界に達したらそこで止まる。
"lua"
別途作成したLua関数を起動させる。
上記以外
アニメーションはしない。

なお、このアニメーションはanimtimeを100に設定したからと言って、必ずしも正確に100ミリ秒きっちりで動いたりはしない。
アニメーション処理するかどうかチェックした時間を調べ、それが前回のアニメーション処理した時間(%info.countに格納)から、animtimeを超えて経過していれば、はじめてアニメーション処理をするようになっている。
なので重い処理を頻繁に挟むと、設定したanimtimeからどんどん遅延していくだろう。
また、アニメーション処理はvisibleの値とは関係なしに処理される。これは後述のanimtype="lua"でも変わらないので、スプライトをいじる以外の処理をしていると、困ったことになるかも知れない。

animtype="lua"

非常に拡張性が高いのに、調べてみると現時点ではまともな設定方法存在していなかったりする。吐きそうw
Lua的な話になるが。
spスプライトとして、sp.animtype="lua"ならば、sp.animfunc(spsetname, spname, sp)が実行される仕組みである
なので、予めsp.animfunc=function()...endと設定しておかなければならないが、これをするための仕組みがBASICに用意されていない。
よって、作成した。

spmove.lua
-- spmove.lua

spmove = {}
do
	-- スプライトを円周上にに動かすアニメーション関数
	local vector = 0
	function spmove.funcname(spsetname, spname, sp)
		sp.cx = 400 + math.cos(vector) * 250
		sp.cy = 300 + math.sin(vector) * 250
		vector = vector + 0.1
	end
end

basic.registercom("SPSETANIMFUNC","SS")
function basic_func.SPSETANIMFUNC(name,funcname)
	local setname,spname=basic.spnamesplit(name)
	if not basic.spriteset[setname] or not basic.spriteset[setname][spname] then
		return -- deleteの場合は何もしない
	end
	local r=basic.spriteset[setname][spname]
	r.animfunc = spmove[funcname]
end

上記スクリプトをspmove.lua名前で保存する。
その上で、BASICの中から

luafile "spmove.lua"

と実行する。
そうすると、SPSETANIMFUNC命令作成されるので、スプライト名と関数名を与える。

spsetanimfunc "spname","funcname"

funcnameは、予めspmove.luaの中で作成しておかなければならない。

spmove.funcname = function(spsetname, spname, sp)
	-- ここに諸々の処理を書く。
end

関数の中から問題スプライトだけでなくNScripter2で扱える全てのリソースアクセスできる。
よって、スプライトを動かすだけでなく、他のスプライトや音やキャプションを変更したり、全くもって自由自在である
本気でスプライトアニメーション活用しようと思ったら、STGなどで敵を動かしたり、スコア表示オブジェクトを作って点数アニメーション自動でさせたりと言った使い方になるだろう。
AVGで使うなら、目パチアニメーションを自然な感じでやったり……と言うことになるか。

上記spmove.luaを使ってみた00.txt
@start
luafile "spmove.lua"
sp "test",{name="chr\chr0.png",cx=400,cy=300,z=0,animtype="lua",animtime=100}
spsetanimfunc "test","funcname"
print #C
click
quit

2012年10月19日のツイート

2012-10-19 (sub)


Powered by twtr2src

SP仕様確認とアニメーション処理の基礎

NScripter比較して、通常スプライト拡張スプライトをごっちゃにして扱えるようになった。これは進歩

最低限の記述

sp "sprite",{name="sprite.png"}

省略した場合の各種値は以下のようになる。

x
0
y
0
z
0
a
255
cell
0
cellnum
nameの指定による。
w
スプライトによる
h
スプライトによる
animtype
""
animtime
0
blend
0
visible
1
rot
0

通常スプライト拡張スプライト判別

もし、与えられたオプションの中にxがあれば、通常スプライトになる。
そうでなければ、cxの有無を調べ、あれば拡張スプライトになる。
さもなければ、やはり通常スプライトになる。

余分なパラメータ

通常スプライトでもrotなどを指定してもエラーにはならない。(反映はされないが)

整数パラメータ

xやyに非整数を与えてもエラーにはならない。与えられた値はそのまま保持して、getspinfoで取得できる。
実際の画面では四捨五入っぽい演算がなされた数値で処理される。
zに非整数を与えても問題はない。

zの扱い

マイナスも普通に受け付けて、値が少ないほど画面手前に来る。
同じz値を持つスプライト複数あると、一つを除いて他は表示されなくなる。どれが表示されなくなるかは判然としない。マニュアルに載せる文言としては「保証しない」くらいだろう。
0.1でもずれていれば大丈夫なので、きちんと管理すること。

alphaの扱い。

設定した数値はそのまま保存される。
端数は受け付けるが効果があるかは不明
255を越えたら255扱いになり、0で完全に透明。
マイナスも受け付けるが効果のほどは「保証しない」だろう。

通常スプライト拡張スプライトの切り替え

SPMOVELT命令スプライトを動かせば、そのスプライト自動的拡張スプライトになる。
逆にSPMOVE命令スプライトを動かせば、そのスプライト自動的に通常スプライトになる。

アニメーション処理

今回のスプライトのもう一つの革命拡張は、アニメーションパターンを自前で作成できるようになったことだと思う。
animtimeが0以外の数値であれば、それはアニメーションの設定されたスプライト判断される。
ここで、animtypeが

""
セル番号を増やしていって、限界数を越えたら最初に戻る。
"normal"
""と同じ。
"round"
最初は増えて、限界に達したら今度は逆にセル番号を減らし、0になったらまたプラスに転じる。(今現在どちらになっているかは、%info.animvecを調査すればわかる)
"stop"
増えていき、限界に達したらそこで止まる。
"lua"
別途作成したLua関数を起動させる。
上記以外
アニメーションはしない。

なお、このアニメーションはanimtimeを100に設定したからと言って、必ずしも正確に100ミリ秒きっちりで動いたりはしない。
アニメーション処理するかどうかチェックした時間を調べ、それが前回のアニメーション処理した時間(%info.countに格納)から、animtimeを超えて経過していれば、はじめてアニメーション処理をするようになっている。
なので重い処理を頻繁に挟むと、設定したanimtimeからどんどん遅延していくだろう。
また、アニメーション処理はvisibleの値とは関係なしに処理される。これは後述のanimtype="lua"でも変わらないので、スプライトをいじる以外の処理をしていると、困ったことになるかも知れない。

animtype="lua"

非常に拡張性が高いのに、調べてみると現時点ではまともな設定方法存在していなかったりする。吐きそうw
Lua的な話になるが。
spスプライトとして、sp.animtype="lua"ならば、sp.animfunc(spsetname, spname, sp)が実行される仕組みである
なので、予めsp.animfunc=function()...endと設定しておかなければならないが、これをするための仕組みがBASICに用意されていない。
よって、作成した。

spmove.lua
-- spmove.lua

spmove = {}
do
	-- スプライトを円周上にに動かすアニメーション関数
	local vector = 0
	function spmove.funcname(spsetname, spname, sp)
		sp.cx = 400 + math.cos(vector) * 250
		sp.cy = 300 + math.sin(vector) * 250
		vector = vector + 0.1
	end
end

basic.registercom("SPSETANIMFUNC","SS")
function basic_func.SPSETANIMFUNC(name,funcname)
	local setname,spname=basic.spnamesplit(name)
	if not basic.spriteset[setname] or not basic.spriteset[setname][spname] then
		return -- deleteの場合は何もしない
	end
	local r=basic.spriteset[setname][spname]
	r.animfunc = spmove[funcname]
end

上記スクリプトをspmove.lua名前で保存する。
その上で、BASICの中から

luafile "spmove.lua"

と実行する。
そうすると、SPSETANIMFUNC命令作成されるので、スプライト名と関数名を与える。

spsetanimfunc "spname","funcname"

funcnameは、予めspmove.luaの中で作成しておかなければならない。

spmove.funcname = function(spsetname, spname, sp)
	-- ここに諸々の処理を書く。
end

関数の中から問題スプライトだけでなくNScripter2で扱える全てのリソースアクセスできる。
よって、スプライトを動かすだけでなく、他のスプライトや音やキャプションを変更したり、全くもって自由自在である
本気でスプライトアニメーション活用しようと思ったら、STGなどで敵を動かしたり、スコア表示オブジェクトを作って点数アニメーション自動でさせたりと言った使い方になるだろう。
AVGで使うなら、目パチアニメーションを自然な感じでやったり……と言うことになるか。

上記spmove.luaを使ってみた00.txt
@start
luafile "spmove.lua"
sp "test",{name="chr\chr0.png",cx=400,cy=300,z=0,animtype="lua",animtime=100}
spsetanimfunc "test","funcname"
print #C
click
quit

2012年10月19日のツイート

2012-10-19 (sub)


Powered by twtr2src

SP仕様確認とアニメーション処理の基礎

NScripter比較して、通常スプライト拡張スプライトをごっちゃにして扱えるようになった。これは進歩

最低限の記述

sp "sprite",{name="sprite.png"}

省略した場合の各種値は以下のようになる。

x
0
y
0
z
0
a
255
cell
0
cellnum
nameの指定による。
w
スプライトによる
h
スプライトによる
animtype
""
animtime
0
blend
0
visible
1
rot
0

通常スプライト拡張スプライト判別

もし、与えられたオプションの中にxがあれば、通常スプライトになる。
そうでなければ、cxの有無を調べ、あれば拡張スプライトになる。
さもなければ、やはり通常スプライトになる。

余分なパラメータ

通常スプライトでもrotなどを指定してもエラーにはならない。(反映はされないが)

整数パラメータ

xやyに非整数を与えてもエラーにはならない。与えられた値はそのまま保持して、getspinfoで取得できる。
実際の画面では四捨五入っぽい演算がなされた数値で処理される。
zに非整数を与えても問題はない。

zの扱い

マイナスも普通に受け付けて、値が少ないほど画面手前に来る。
同じz値を持つスプライト複数あると、一つを除いて他は表示されなくなる。どれが表示されなくなるかは判然としない。マニュアルに載せる文言としては「保証しない」くらいだろう。
0.1でもずれていれば大丈夫なので、きちんと管理すること。

alphaの扱い。

設定した数値はそのまま保存される。
端数は受け付けるが効果があるかは不明
255を越えたら255扱いになり、0で完全に透明。
マイナスも受け付けるが効果のほどは「保証しない」だろう。

通常スプライト拡張スプライトの切り替え

SPMOVELT命令スプライトを動かせば、そのスプライト自動的拡張スプライトになる。
逆にSPMOVE命令スプライトを動かせば、そのスプライト自動的に通常スプライトになる。

アニメーション処理

今回のスプライトのもう一つの革命拡張は、アニメーションパターンを自前で作成できるようになったことだと思う。
animtimeが0以外の数値であれば、それはアニメーションの設定されたスプライト判断される。
ここで、animtypeが

""
セル番号を増やしていって、限界数を越えたら最初に戻る。
"normal"
""と同じ。
"round"
最初は増えて、限界に達したら今度は逆にセル番号を減らし、0になったらまたプラスに転じる。(今現在どちらになっているかは、%info.animvecを調査すればわかる)
"stop"
増えていき、限界に達したらそこで止まる。
"lua"
別途作成したLua関数を起動させる。
上記以外
アニメーションはしない。

なお、このアニメーションはanimtimeを100に設定したからと言って、必ずしも正確に100ミリ秒きっちりで動いたりはしない。
アニメーション処理するかどうかチェックした時間を調べ、それが前回のアニメーション処理した時間(%info.countに格納)から、animtimeを超えて経過していれば、はじめてアニメーション処理をするようになっている。
なので重い処理を頻繁に挟むと、設定したanimtimeからどんどん遅延していくだろう。
また、アニメーション処理はvisibleの値とは関係なしに処理される。これは後述のanimtype="lua"でも変わらないので、スプライトをいじる以外の処理をしていると、困ったことになるかも知れない。

animtype="lua"

非常に拡張性が高いのに、調べてみると現時点ではまともな設定方法存在していなかったりする。吐きそうw
Lua的な話になるが。
spスプライトとして、sp.animtype="lua"ならば、sp.animfunc(spsetname, spname, sp)が実行される仕組みである
なので、予めsp.animfunc=function()...endと設定しておかなければならないが、これをするための仕組みがBASICに用意されていない。
よって、作成した。

spmove.lua
-- spmove.lua

spmove = {}
do
	-- スプライトを円周上にに動かすアニメーション関数
	local vector = 0
	function spmove.funcname(spsetname, spname, sp)
		sp.cx = 400 + math.cos(vector) * 250
		sp.cy = 300 + math.sin(vector) * 250
		vector = vector + 0.1
	end
end

basic.registercom("SPSETANIMFUNC","SS")
function basic_func.SPSETANIMFUNC(name,funcname)
	local setname,spname=basic.spnamesplit(name)
	if not basic.spriteset[setname] or not basic.spriteset[setname][spname] then
		return -- deleteの場合は何もしない
	end
	local r=basic.spriteset[setname][spname]
	r.animfunc = spmove[funcname]
end

上記スクリプトをspmove.lua名前で保存する。
その上で、BASICの中から

luafile "spmove.lua"

と実行する。
そうすると、SPSETANIMFUNC命令作成されるので、スプライト名と関数名を与える。

spsetanimfunc "spname","funcname"

funcnameは、予めspmove.luaの中で作成しておかなければならない。

spmove.funcname = function(spsetname, spname, sp)
	-- ここに諸々の処理を書く。
end

関数の中から問題スプライトだけでなくNScripter2で扱える全てのリソースアクセスできる。
よって、スプライトを動かすだけでなく、他のスプライトや音やキャプションを変更したり、全くもって自由自在である
本気でスプライトアニメーション活用しようと思ったら、STGなどで敵を動かしたり、スコア表示オブジェクトを作って点数アニメーション自動でさせたりと言った使い方になるだろう。
AVGで使うなら、目パチアニメーションを自然な感じでやったり……と言うことになるか。

上記spmove.luaを使ってみた00.txt
@start
luafile "spmove.lua"
sp "test",{name="chr\chr0.png",cx=400,cy=300,z=0,animtype="lua",animtime=100}
spsetanimfunc "test","funcname"
print #C
click
quit

2012年10月19日のツイート

2012-10-19 Friday

2012-10-18 (sub)


Powered by twtr2src

2012年10月18日のツイート

2012-10-18 (sub)


Powered by twtr2src

2012年10月18日のツイート