はじめに
今作っているゲームで実際にやっているデバッグと単体テストのやり方を紹介します
ただし、全て我流です!参考になるやらならないやら!
ちなみに、例やコードで書いてある内容は実際に作っているゲームの内容とは一切関係ありません。
RPGっぽい例を出していますが、実際に作っているのはRPGではありません。
サクサクデバッグしたい!
ゲームのデバッグは、特定の条件下でデバッグをするのが困難な場合が多くあります
例えば、強力な敵キャラの動作テスト、特定のアイテムを持っている場合のテスト
などなど・・
そういう場合は、デバッグ値で無敵状態、最初からアイテムを持っている状態などを
作ってからデバッグします
敵からのダメージの値が正しいか、経験値が正しいかなど、ゲームバランスに関わるような処理などは
いちいち動作確認していられないので、単体テストが非常に有効です
実際にやってみる
デバッグ用のファイルを用意します
ここでは無敵状態などのフラグの制御だけではなく、
ゲームロード時に任意の値を呼び出せるようにしておくと便利です
class Debug extends Node
constructor: () ->
super
@muteki = true; #無敵
@test_load = { #セーブデータのロード時にこの値を強制的に呼び出す
'level':99, #レベルカンスト
'items':['oriharukon','misuriru'] #アイテムを最初から持ってる
}
単体テスト用のコードを書くファイルです
ダメージ計算式など、複雑な条件が絡み合う計算などで重宝します
class Test extends Node
constructor:()->
super
@test_ext_flg = true #テスト実行フラグ、trueだとゲーム呼び出し時にテスト関数を走らせる
textExe:()->
game.damageCalc() #ダメージ計算式を実行
ゲームのメインで使うシーン以外に、
テスト用のシーンを用意しておきます
class testScene extends Scene
constructor: () ->
super
ゲームクラス内で実行します
class MyGame extends Game
constructor:()->
super
@debug = new Debug()
@test = new Test()
onload:()-> #ゲーム呼び出し時に実行する
if @test.test_exe_flg is true
@test_scene = new testScene() #テストフラグが立っていたらテスト用のシーンを実行
@pushScene(@test_scene)
@test.testExe()
else
@main_scene = new mainScene() #通常はゲームを開始する
@pushScene(@main_scene)
enchant.jsでのシーンの概念について、興味のある方はこちらを参考にしてみてください。
http://www.atmarkit.co.jp/ait/articles/1304/01/news034_4.html
さいごに
メモリ内変数が複雑に変化し、絡み合うゲーム開発では
デバッグとテストのやり方を効率的にすることで、開発はより快適になります
このデバッグとテストのクラスを丁寧に整備していけば、
再現条件が難しいバグを発見したときでも、サクサクデバッグができるようになります。
次回
次回はenchant.jsでHTMLタグとCSSを使う方法をやろうと思います。
基本的にenchant.js内で使われるタグはcanvasタグ(Spriteクラス)ですが
任意のHTMLタグを使用することも出来ます。
メニューボタンなどを作る時にsurfaceでボタンを描画してlabelで文字を書くのは面倒ですし、
画像を使わず容量節約もしたいです。
これでサクサクとリッチなボタンを作ります。