画面に線を引くテスト
といっても直接描画命令ではなくてスプライトの矩形塗りつぶしによるものですが。
NScripter更新予定/シナリオ仕事開始 - 高橋直樹の仕事と日常の日記
- GDIを使った線や矩形や円などの描画関数も実装したい。
が付いたら “○△□” とか描画できるのにっ!*1
(NScripter(Version 2.95)で動かしてみてください)
- 00.txt
*define luacall animation luasub init luasub animestart luasub animestop game *start init animestart caption "[SHIFT] キーでマウスカーソルの場所に線を表示します" こんにちは、世界。@ animestop 中に誰もいませんよ。@ end
- system.lua
LINEWIDTH = 50 -- 描画される線の太さ LINECOLOR = '00FFFF' -- 線の色(RRGGBB) LINELIFE = 4000 -- 寿命(ms) MAX_Y = 480 Sprite = {} function Sprite:new(number, size, x, y) local sprite = {} for i, v in pairs(self) do sprite[i] = v end sprite.starttime = NSTimer() sprite.number = number sprite.x, sprite.y = x, y sprite.size = size sprite:putsprite(number, size, x, y) return sprite end function Sprite:animation() self.size = math.max(0, self.size * (LINELIFE - (NSTimer() - self.starttime )) / LINELIFE) self:putsprite(self.number, self.size, x, y) end function Sprite:stop() NSExec(string.format('vsp %d, 0', self.number)) end function Sprite:putsprite() local x = self.x - self.size / 2 local y = 0 NSExec(string.format('lsp %d, ":c;>%d,%d,#%s", %d, %d', self.number, self.size, MAX_Y, LINECOLOR, x, y)) end SpriteManager = {} function SpriteManager:init(start_number) self.sprites = {} end function SpriteManager:newsprite(size, x, y) local id = #self.sprites + 1 for i, v in pairs(self.sprites) do if v.size == 0 then id = i break end end self.sprites[id] = Sprite:new(id, size, x, y) end function SpriteManager:animation() for i, v in pairs(self.sprites) do v:animation() end end function SpriteManager:stop() for i, v in pairs(self.sprites) do v:stop() end end function NSCOM_init() SpriteManager:init() NSExec('erasetextwindow 0') NSExec('print 1') end function NSCOM_animestart() NSLuaAnimationMode(true); end function NSCOM_animestop() NSLuaAnimationMode(false); SpriteManager:stop() NSExec("print 1") end OLDKEY = false function NSCALL_animation () SpriteManager:animation() local key = NSGetKey('SHIFT') local x, y = NSGetMouse() if key and not OLDKEY and x ~= -1 and y ~= -1 then SpriteManager:newsprite(LINEWIDTH, x, y) end OLDKEY = key NSExec("print 1") return true end -- Public Domain. 好きに流用してください。
まだ Lua にも NScripter にも慣れてないのでぐだぐだなソースですがとりあえず。
使ってみた感想ですが。Lua、デバッグが手間です。変数名のスペルミスしても Python と違いエラーにならずに nil 返って来ちゃうし。まあこの仕様も、組み込み用途だと下手にエラーで止まるより間違った動作であれ停止しない事を求められる、ということからなのかな? それ考えると一概にどちらが良いとも言えないか。