記事一覧
第1回 設定とタイトル
第2回 メイン画面
第3回 ターゲットと敵と
第4回 スコア・時間など
第5回 ゲームを公開する
第6回 Twitterにスコアを投稿
第7回 サウンド関係
第8回 物理エンジンなど
Tonyu2 であほげーを作ろう その2
前回に引き続き,あほげーのテンプレートを紹介していきます.
前回,タイトルが表示されて,Startボタンが出たけれど押しても何も起きなかったと思いますので,今回はちゃんとゲームをスタートさせるところを作ります.
なお,ゲームの内容はテーマが決まってから詰めるところなので,今回作るゲームの肝心の内容はテキトーです.要するにゲーム全体の流れ(タイトル→ゲーム本体→ゲーム終了)を構築しておいて,テーマが出たら内容をしっかり詰める作戦でいきます.
では,今回のプログラムを開いてみてください.
今回追加・変更したファイルは次の3つです
-
Main
[追加] ゲーム開始時にキャラを出現させるオブジェクト -
Player
[追加] プレイヤーのオブジェクト -
Title
[変更] ボタンを押したときにMain
に移動する処理を追加.
Main
Main では,プレイヤーのオブジェクトを出現させています.
new Player{x=100,y=100};
前回書き忘れましたが,{x=100,y=100}
の部分は,オブジェクトを生成するときに,フィールドの値に書き込みを行うためのものです.JavaScriptに慣れた方は「あれ?」と思うかもしれませんが,Tonyu2のオブジェクトリテラルでは,属性名の後に=
を書くこともできます(:
も可).また,オブジェクトリテラルを引数として渡すときに()
を省略することも可能です.
メニューの「実行」から「Mainを実行」を選べば,いきなりメイン画面から始めることも可能です.(タイトルから始めたい場合は「Settingを実行」にしてください)
Player
プレイヤーは次のようになっています.
pad=new APad;//★1
p=$pat_ahoge26+0;//★2
while(true) {
x+=pad.vx*5;//★1-1
y+=pad.vy*5;
update();//★3
}
- ★1 スマートフォンでも動かせるようAPadを使います.これは,画面上に仮想的なアナログパッドを表示させるものです.スマートフォンではスワイプして動かします.PCではキーボードでも操作可能です.
- ★1-1 パッド移動方向は
pad.vx
などで取得します(-1から1まで).この値を使ってフィールドx
やy
を変化させると,画面内のキャラクタがその座標に移動します.1 - ★2 画像は,次のファイルを使っています.くどいようですが,テキトーです.テーマが決まったらちゃんとしたのに差し替えましょう.
- ★3
update
メソッドは,このオブジェクトの1フレーム分の動作を終了させる役割をもちます.繰り返しが行われるたびに基本的に1回実行する必要があります.
上のahoge.png が追加されていることは, メニューの「ウィンドウ」から「画像リスト」を表示して確認できます.次のように,32x32ドットごとに別のパターンになるようにしています.「画像詳細」ウィンドウ左端の「プレイヤー」をクリックすると,$pat_ahoge26+0
というパターン番号(整数値)が割り振られていることが確認できます.
プログラム中で,p=$pat_ahoge26+0;
のようにフィールドp
にパターン番号を代入すると,そのパターンを表示できます.
Title
Titleクラスは前回にもありましたが,今回はボタンを押したらMainに移動する処理を追加しました.
//前略
//スタートボタン
new Button{
text="Start",
top=300,
onClick=start,//★4追加
};
//★5追加↓
\start() {
new FadeEffect{type="out",page=Main};//★6
}
ボタンを押したときの動作は,ボタン生成時にonClickフィールドに設定します.start
は★5で定義されているstartメソッドを指します.
★5の\start()...
はfunction start
と等価です,つまりstart
メソッドを定義しています.
メソッド内では★6のようにFadeEffectオブジェクトを生成しています.これは,
- フェードアウトを表示
- 今まで動いていたオブジェクトを全部消し
-
page
フィールドに指定したクラスのオブジェクトを生成します.
簡単にいうと,別のページ(シーン)に移動する処理にフェードアウトをおまけでつけています.2
これによって,Startボタンが押されたらMain,つまりゲーム本体が始まるという処理ができました.
今回はここまで.テキトーなゲームなのにまだ完成していないのでそれは次回に.