こんだけ稲妻見たの久しぶり
— がちゃまにあ (@gachamania21) 2014, 7月 19ということで引きこもってましたがちゃまにあですどーもこんばんは。
今日は1日enchant.jsいじり。
集中力がなくてほとんど進んでないけど。
サンプルになっている「ドロイドくんもぐらたたき」について考えてみました。
大体意味はわかるけど
例によって手書きノートを晒します。
これがコード全文。
http://code.9leap.net/内のサンプルより引用しました。
enchant();
//ドロイド君の出現数
maxDroid = 30;
//穴クラスの定義
Pit = Class.create(Sprite,{ //Spriteクラスを継承する
initialize:function(x,y){
enchant.Sprite.call(this,48,48); //Spriteクラスのコンストラクタ呼び出し
this.image = game.assets['mogura.png'];
this.x = x;
this.y = y;
this.addEventListener('enterframe',this.tick); //イベントリスナーを定義
this.addEventListener('touchstart',this.hit); //叩いた場合のイベントリスナーを定義
this.mode = 2; //ドロイド君の出現モードを待つ、からに設定
this.nextMode = 0;
this.waitFor = game.frame+Math.floor(Math.random()*100);
},
tick:function(){ //ドロイド君が出るアニメーションを繰り返す
if(game.frame%2!=0)return; //4フレームごとに実行する
switch(this.mode){
case 0: //穴からドロイド君がでてくる
this.frame++;
if(this.frame>=4){
this.mode=2; //出切ったら、待つモードへ
this.nextMode=1;//待った後に遷移するモードは1(隠れる)
this.waitFor = game.frame+Math.floor(Math.random()*30);
}
break;
case 1://ドロイド君が穴に隠れる
this.frame--;
if(this.frame<=0){
this.mode=2; //出切ったら、待つモードへ
this.nextMode=0;//待った後に遷移するモードは0(出現)
this.waitFor = game.frame+Math.floor(Math.random()*200);
//ドロイド君の最大数を減らす
maxDroid--;
//もしこれ以上ドロイド君は出現しないなら、穴を塞ぐ
if(maxDroid<=0)this.mode=3;
}
break;
case 2://待つ
if(game.frame>this.waitFor){
this.mode = this.nextMode;
}
break;
case 3://なにもしない(この穴からもうドロイド君は出ない)
break;
}
},
hit:function(){ //ドロイド君を殴る
if(this.frame==5)return;//既に殴れた状態だったらなにもしない
if(this.frame>=2){ // ドロイド君が半分以上出ていた場合
this.frame=5; //殴れたドロイド君
this.mode=2; //待ちモードに入る
this.nextMode=1;
this.waitFor = game.frame+10; //待つフレーム数は10で一定
scoreLabel.add(1); //スコアに追加
}
}
});
//ScoreLabelクラスの定義
ScoreLabel = Class.create(Label,{ //Labelクラスを継承する
initialize:function(x,y){
enchant.Label.call(this,"SCORE:0"); //Labelクラスのコンストラクタ呼び出し
this.x=x;
this.y=y;
this.score = 0;
},
add:function(pts){ //スコアを加算
this.score+=pts;
this.text="SCORE:"+this.score; //表示を修正
}
});
window.onload = function(){//初期化
game = new Game(320, 320);
game.preload('mogura.png');//ドロイド君画像を読み込み
game.onload = function(){
//スコアラベルを表示
scoreLabel=new ScoreLabel(5,5);
game.rootScene.addChild(scoreLabel);
//穴を4x4に並べる
for(y=0;y<4;y++){
for(x=0;x<4;x++){
var pit = new Pit(x*48+20,y*48+20);
game.rootScene.addChild(pit);
}
}
}
game.start();
}
コードだけではなくノートとかメモを貼るのは、どういうところに引っかかるか見てもらうため。
どうでもいいような所で躓いたりしてると思うので(笑)
で、今回の疑問。
変数って宣言しなくていいの??
modeもnextModeもwaitForも、varで宣言してないけど。
「Pit = Class.create(Sprite,{・・・」は、
「var Pit=enchant.Class.create(enchant.Sprite{・・・」の書きかえってことでいいのかな。
あと、ifを使う時って{}でくくらなくていいんでしょうか。breakだからOKとかあるの?
うーむ。
まあ大体の仕組みはわかったので(nextModeの役割がわかったときはおおぉ!ってなった)良しとしています。
あとはこれを生かしてコードを書くと。
折角なので画像も作ります。ドット絵。
まずは簡単なゲームを完成させたい!