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
[ ツッコむ ]
以上です。
