TIC-80 エラー早見表
TIC-80でよく見るエラーメッセージとその原因・解決方法をまとめました。開発中にすぐ参照できる早見表です。
⚠️ 重要:TIC-80でJavaScriptを使用する場合は、必ず最初に new js
コマンドを実行してください。これを実行しないとLuaモードになり、文法エラーが発生します。
🚨 エラーメッセージ早見表
エラーメッセージ |
種類 |
解決方法 |
unexpected symbol near '...' |
文法 |
括弧やセミコロンの不足、全角文字の混入をチェック |
'end' expected |
文法 |
JavaScriptを使用していることを確認(new jsを実行したか確認) |
'}' expected |
文法 |
中括弧の対応を確認(JavaScript) |
attempt to index a nil value |
実行時 |
配列やオブジェクトが存在するか確認 if (obj) then ... end |
attempt to perform arithmetic on a nil value |
実行時 |
変数を使用前に初期化 let x = 0 |
undefined is not a function |
実行時 |
関数名のスペルチェック、大文字小文字を確認 |
Cannot read property of undefined |
実行時 |
オブジェクトの存在確認 if (obj && obj.prop) |
stack overflow |
実行時 |
無限再帰をチェック、終了条件を確認 |
out of memory |
実行時 |
配列の無限追加、削除忘れをチェック |
何も表示されない |
よくある |
cls()の呼び忘れ、座標が画面外、スプライト番号が範囲外(0-255) |
音が鳴らない |
よくある |
sfx()の引数確認、チャンネル重複をチェック |
キー入力が効かない |
よくある |
btn()とbtnp()の使い分け、ボタンIDを確認(0-7) |
🎮 基本API早見表
入力関数
btn(id) - ボタンが押されているか(押し続け検出)
btnp(id) - ボタンが押された瞬間か(1回だけ検出)
ボタンID: 0:上 1:下 2:左 3:右 4:Z 5:X 6:A 7:S
描画関数
cls([color]) |
画面クリア |
spr(id,x,y,[colorkey],[scale],[flip],[rotate]) |
スプライト描画 |
print(text,x,y,[color],[fixed],[scale]) |
テキスト表示 |
rect(x,y,w,h,color) |
塗りつぶし四角 |
rectb(x,y,w,h,color) |
四角の枠線 |
circ(x,y,r,color) |
塗りつぶし円 |
circb(x,y,r,color) |
円の枠線 |
line(x0,y0,x1,y1,color) |
線を描画 |
pix(x,y,[color]) |
点を描画 |
音響関数
sfx(id,[note],[duration],[channel],[volume],[speed])
効果音を再生。idは音番号、noteは音階(C-4形式)、durationは長さ
💡 よくある問題と解決法
配列操作でのエラー回避
// ❌ 間違い:順方向ループで削除
for (let i = 0; i < bullets.length; i++) {
if (bullets[i].y < 0) {
bullets.splice(i, 1); // インデックスがずれる!
}
}
// ✅ 正解:逆順ループ
for (let i = bullets.length - 1; i >= 0; i--) {
if (bullets[i].y < 0) {
bullets.splice(i, 1);
}
}
変数の初期化忘れ防止
// ✅ ファイルの先頭で初期化
let playerX = 120;
let playerY = 100;
let bullets = [];
let score = 0;
function TIC() {
// 安全に使用できる
playerX = playerX + 1;
}
スプライト番号の範囲チェック
// ✅ 範囲を制限
let spriteId = Math.max(0, Math.min(255, id));
spr(spriteId, x, y);