2018/10/16(火) [n年前の日記]
#1 [tic80] TIC-80でクラス相当を書く
TIC-80 を触ってたり。Luaでクラス相当をどうやって書くのか忘れてたので再勉強。
とりあえず、こんな感じの .tic を書いた。
ブラウザ上で実行するなら、以下を開けば…動くんじゃないかな…。
_movecircle.tic.html
ブラウザ上で動作するソレを出力したい場合は、TIC-80上で export html と打ち込めばいいらしい。ファイル保存ダイアログが開いて、html を保存することができる。
とりあえず、こんな感じの .tic を書いた。
ブラウザ上で実行するなら、以下を開けば…動くんじゃないかな…。
_movecircle.tic.html
- 画面をクリックしてからESCキーを押せばメニューが出るので、「CLOSE GAME」を選んでZキーを押せば、あるいは「CLOSE GAME」をマウスクリックすれば実行を停止できる。
- 入力待ちの状態でF1キーを押せばエディタが開く。
- F2キーを押せばドットエディタが開く。
ブラウザ上で動作するソレを出力したい場合は、TIC-80上で export html と打ち込めばいいらしい。ファイル保存ダイアログが開いて、html を保存することができる。
◎ ソース。 :
ソースは以下のような感じ。無駄に長いけど…。
最初のあたりで Class相当を書いてある。書き方は、以下のページが参考になった。
_Luaでオブジェクト指向(1)―基本はコロン記法とメタテーブル - Minecraftとタートルと僕
-- title: testcart -- author: mieki256 -- desc: short description -- script: lua Obj = {} Obj.new = function(cx, cy, ang, r) local o = { id=0, x=0, y=0, t=0, cx=cx, cy=cy, ang=ang, r=r } o.update = function(self,dr) self.id = 1 + (self.t % 32 // 16) local rad = math.rad(self.ang) local r = self.r self.x = r*math.cos(rad)+self.cx self.y = r*math.sin(rad)+self.cy self.ang = self.ang + 1.5 self.r = self.r + dr self.t = self.t + 1 end o.draw = function(self) spr(self.id,self.x-4,self.y-4,0) end setmetatable(o, {__index=Obj}) return o end scrw, scrh = 240, 136 cx, cy = scrw/2, scrh/2 t=0 -- init objs objs = {} n = 24 for i=1,n do local o = Obj.new(cx, cy, i*360/n, 60) table.insert(objs, o) end -- main loop function TIC() local r = 0 if btn(0) then r=-1 end if btn(1) then r=1 end -- update for i, o in ipairs(objs) do o:update(r) end -- draw cls(0) for i, o in ipairs(objs) do o:draw() end print("Lua: " .. _VERSION,4,8*1) print("count: " .. t,4,8*2) print(t//60 .. " sec",4,8*3) t=t+1 end
最初のあたりで Class相当を書いてある。書き方は、以下のページが参考になった。
_Luaでオブジェクト指向(1)―基本はコロン記法とメタテーブル - Minecraftとタートルと僕
◎ ローカル変数について。 :
Luaの場合、ローカル変数を使いたいときは、
local x=0のような感じで、local とつけてやるらしい。
◎ sin,cosについて。 :
2Dゲームを書く場合、sin,cos が使えると便利なわけだけど。Luaの場合は以下のような感じで使える。
このあたりは、以下が参考になりそう。
_Lua 5.1 リファレンスマニュアル
_lua-users wiki: Math Library Tutorial
_Lua標準ライブラリ - AviUtlスクリプト Wiki
math.sin(ラジアン値) | sin値を返す |
math.cos(ラジアン値) | cos値を返す |
math.rad(角度) | 角度(0-360度)をラジアン値に変換する。 |
このあたりは、以下が参考になりそう。
_Lua 5.1 リファレンスマニュアル
_lua-users wiki: Math Library Tutorial
_Lua標準ライブラリ - AviUtlスクリプト Wiki
[ ツッコむ ]
以上です。