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);