ここでは、「game01」というディレクトリ内で作業しているという前提で説明しています。
タイトル画面を作る
ゲームが始まるまで、特定のキー入力を待つタイトル画面を作成します。
ゲーム全体の制御を行う「gameControl.coffee」を生成します。
ゲームのトップディレクトリ(game01)で下記コマンドを実行し、「src」ディレクトリに「gameControl.coffee」が生成されているのを確認してください。
監視コマンドが実行されている場合は、自動的にコンパイルされます。
$ enforce derive gameControl
そして、生成された「gameControl.coffee」の「constructor」を下記のように修正してください。
constructor:(initparam)->
super(initparam)
@title = addObject
type: LABEL
x: SCREEN_WIDTH / 2
y: SCREEN_HEIGHT / 2
width: SCREEN_WIDTH
height: 48
fontsize: 48
textalign: 'center'
labeltext: "PUSH 'z' KEY"
「constructor」でタイトル画面となる「Label」スプライトを生成しています。
これは、enchant.jsのスプライトの一種である「Label」を使い、テキストを画面に表示しています。
次に、「behavior」を下記のように修正してください。
「when 1」の内容の前半は、「enforceMain.coffee」の「constructor」をそのまま持ってきています。
最後の「@nextjob()」を忘れると延々とオブジェクト生成が行われて、ブラウザがハングします。
behavior:->
super()
switch @_processnumber
when 0
button = PADBUTTONS[0]
if (button[0])
@title.visible = false
@nextjob()
when 1
bearobj = addObject
motionObj: bearChara
type: SPRITE
x: SCREEN_WIDTH / 2
y: SCREEN_HEIGHT / 2
image: 'bear'
width: 32
height: 32
gravity: 1
animlist: [
[50, [0, 0, 1, 1, 2, 2, 1, 1]]
[50, [5, 5, 6, 6, 5, 5, 7, 7]]
]
GLOBAL['bearchara'] = bearobj
bearobj.animnum = 1
enemyObj = addObject
motionObj: enemy01
type: SPRITE
x: rand(SCREEN_WIDTH)
y: rand(SCREEN_HEIGHT / 2)
image: 'bear'
width: 32
height: 32
animlist: [
[50, [0, 1, 0, 2]]
]
GLOBAL['enemy'] = enemyObj
@nextjob()
次に「enforceMain.coffee」の「constructor」を下記のように修正し、新規に作成した「gameControl.coffee」からオブジェクトを生成してください。
constructor:->
gameControlObj = addObject
type: CONTROL
motionObj: gameControl
すべての修正が終わり、保存/コンパイルが正常に終了しましたらブラウザをリロードしてください。
画面に「PUSH 'z' KEY」と出て、「z」キーを押すとゲームが開始するようになるはずです。
注意:enchant.jsのLabelは、XPERIA Aの標準ブラウザで使用すると、標準ブラウザが落ちます。
チュートリアル(8) <--- ⬛︎ ---> チュートリアル(10)