enchant.js: Complete – 完成!!

phiary に引っ越しました. 毎日プログラミングやWebに関する情報を発信しています! RSS 登録してたまに覗いたり, tweet やハテブして拡散してもらえると幸いです.

Pocket

このステップで完成です.Step7 との違いはタップ音の再生のみです. iPhone だと動作が重くなるので iPhone の場合 Step7 で止めておいてください.

SAMPLE

サンプルはこちらで見るこができます.

CODE

修正, 追加したコード部分が太字になっています.

/**
 * @scope   EnemySprite.prototype
 */
var EnemySprite = Class.create(ArcSprite, {
    /**
     * エネミースプライトクラス
     */
    initialize : function(){
        // 親のコンストラクタを呼び出す
        ArcSprite.call(this, EnemySprite.RADIUS);
        // タッチイベントを登録
        this.addEventListener(Event.TOUCH_START, this.onTouch);
        // フレームイベントを登録
        this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame);
        
        // 移動する向きを設定(360度ランダムな方向に ENEMY_SPEED ずつ進む)
        var rad = Math.random()*360 * Math.PI/180;
        this.vx = Math.cos(rad) * EnemySprite.SPEED;
        this.vy =-Math.sin(rad) * EnemySprite.SPEED;
        
        // エフェクトと重複した際にタッチがきかなくなるので手前に表示するよう修正
        this._element.style.zIndex = 4;
    },
    onTouch : function(e){
        // ゲームインスタンスを取得
        var game = Game.instance;
        var scene = game.rootScene;
        // スコア
        game.score += 100;
        
        // タップ音を鳴らす
        playSE("tap");
        
        // クラッシュ生成
        var crush = new CrushParticle();
        crush.moveTo(
            this.x + this.width /2 - 4,
            this.y + this.height/2 - 4
            );
        scene.addChild(crush);
        // 自身を削除
        scene.removeChild(this);
        // 新たな敵を生成
        var enemy = new EnemySprite();
        enemy.x = Math.random()*320;
        enemy.y = Math.random()*320;
        scene.addChild(enemy);
    },
    
    onEnterFrame : function(){
        var scene = this.parentNode;
        // 移動
        this.moveBy(this.vx, this.vy);
        // スプライトの上下左右位置
        var left    = this.x;
        var right   = this.x + this.width;
        var top     = this.y;
        var bottom  = this.y + this.height;
        // はみ出た際の処理
        if (left   < 0) { this.x = 0; this.vx*=-1; }
        if (top    < 0) { this.y = 0; this.vy*=-1; }
        if (right  > scene.width) { this.x = scene.width -this.width;  this.vx*=-1; }
        if (bottom > scene.height){ this.y = scene.height-this.height; this.vy*=-1; }
    }
});
// static 
EnemySprite.RADIUS = 16;
EnemySprite.SPEED = 2;



var EXT = "";
if (new Audio().canPlayType('audio/ogg') == 'maybe') { EXT = "ogg"; }
else if (new Audio().canPlayType('audio/wav') == 'maybe') { EXT = "wav"; }
else if (new Audio().canPlayType('audio/mp3') == 'maybe') { EXT = "mp3"; }

/**
 * SE再生
 */
var playSE = function(name)
{
    var SOUND_PATH = "../se/";
    var audio = new Audio(SOUND_PATH + "tap"+'.'+EXT);
    audio.play();
}
    

TRACK BACK URL

POST COMMENT

メールアドレスが公開されることはありません。

COMMENT