前回に引き続き,Toyu System 2(以下Tonyu2)で作る あほげーのテンプレートを紹介していきます.
記事一覧
第1回 設定とタイトル
第2回 メイン画面
第3回 ターゲットと敵と
第4回 スコア・時間など
第5回 ゲームを公開する
第6回 Twitterにスコアを投稿
第7回 サウンド関係
第8回 物理エンジンなど
今回追加するもの
前回はプレイヤーが動くだけだったので,他の登場人物として<<第26回のテーマ>> と<<テーマに関連する何か>> を作ります.
今日のファイルはこちらです.改めて,Tonyu2はブラウザで動作しますので,次のリンクからプログラムの閲覧&編集&実行が可能です.(すいません,投稿した直後のプログラムはうまく開かなかったので,もう一度開いてみてください)
メニューの実行→Settingを実行 を選んで, 一応,ストーリー?を見直しておきましょう
というなんとも抽象的なストーリーですが,テーマが決まった暁には具体的になる....はずです.
とにかく,今回は<<第26回のテーマ>> を集めるのが目的なので,<<第26回のテーマ>> のことを Target と名付けました.
Targetの動作
p=$pat_ahoge26+1;//★1
while(true) {
x+=vx;//★2
y+=vy;//★2
if (screenOut()) die();
update();
}
★1の変数pは,前回説明した通り,絵柄の設定を行っています.↓の絵の2番目の絵になります.
★2では,x+=vx;だの,y+=vy だの書いてありますが,これらの変数はどこにも初期化されている様子がありません.これらは実際にはMainクラスで値を設定しています.
new Player{x=100,y=100};
//---今回追加分↓
while(true) {
if (rnd(50)==0) {
new Target{x=rnd($screenWidth),y=0,vx=0,vy=1};// ★3
}
if (rnd(50)==0) {
new Enemy{x=rnd($screenWidth),y=$screenHeight,vx=0,vy=-1};
}
update();
}
★3のように,オブジェクトを作るときに,後ろに{変数=値...} という形式で変数(フィールド)の内容を初期化しています.ちなみに,ここでは次のように初期化されます.
- x は 0 以上
$screenWidth未満の乱数-
$screenWidthは画面の幅を表すグローバル変数
-
- y は 0
- vx は 0
- vy は 1
★2のx+=vx;,y+=vyによって,xやyの値をvxやvyの分だけ増やすことになるので,このTargetは次のように動きます.
-
vxは0なのでx座標(横)は動かない -
vyは1なのでy座標(縦)は増える.画面上端がy=0で,yが増えるほど下に移動するので,下に移動する
Targetの残りの部分を見ていきます:
p=$pat_ahoge26+1;
while(true) {
x+=vx;
y+=vy;
if (screenOut()) die();//★3
update();//★4
}
- ★3は,
screenOutメソッドにより「オブジェクトが画面外にいるか」という判定を行い,もしそうだったらdieメソッドによりオブジェクトを消しています. - ★4の
updateメソッドは,前回も説明した通り,このオブジェクトの1フレーム分の動作を終了させます.
Targetとの当たり判定
Playerクラスにて,プレイヤーがTargetに当たったら,そのTargetを取れるようにしています.
pad=new APad;
p=$pat_ahoge26+0;
while(true) {
x+=pad.vx*5;
y+=pad.vy*5;
//---今回追加分↓
t=crashTo(Target);//★5
if (t) {//★6
t.die();//★7
}
e=crashTo(Enemy);
if (e) {
die();
}
//---------
update();
}
- ★5 では
crashToメソッドを用いて,Targetクラスのオブジェクト のうちどれかに当たっているかを判定します.- 当たっていたらそのオブジェクトを返します
- 当たっていなかったら
undefinedを返します
- ★6では,★5の結果が
undefined以外かどうか,すなわち,当たっているオブジェクトがあったかを判定します.- JavaScript同様,値が
false,undefined,null,NaN,0,空文字列の場合はfalse相当,それ以外はtrue相当になります.
- JavaScript同様,値が
- ★7では,当たったオブジェクトに対して
dieメソッドを呼び,当たったオブジェクトにを消します.
敵を作る.
ストーリーでは「<<テーマに関連する何か>> は集めるなよ!」と言っていたので,これをEnemyと呼びます.プレイヤーが当たったらプレイヤーが消えます.
作り方はTargetとほとんど同じです.
p=$pat_ahoge26+2;//Targetとの違いはここの絵柄だけ
while(true) {
x+=vx;
y+=vy;
if (screenOut()) die();
update();
}
出現はMainで行います.Targetを出現させる方法と同じです.yは画面下,vyは-1にしているので下から出現します.
new Player{x=100,y=100};
//---今回追加分↓
while(true) {
if (rnd(50)==0) {
new Target{x=rnd($screenWidth),y=0,vx=0,vy=1};
}
if (rnd(50)==0) {// ここでEnemy出現
new Enemy{x=rnd($screenWidth),y=$screenHeight,vx=0,vy=-1};
}
update();
}
当たり判定はPlayerで行います.「当たったらプレイヤー自身が消える」という点以外はTargetと同じです.
pad=new APad;
p=$pat_ahoge26+0;
while(true) {
x+=pad.vx*5;
y+=pad.vy*5;
//---今回追加分↓
t=crashTo(Target);
if (t) {
t.die();
}
e=crashTo(Enemy);
if (e) {
die();// プレイヤー自身が消える
}
//---------
update();
}
今回はここまで.次はスコアやら体力やら時間やら,パラメータ系の作成をしていきます.
