マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

enchant.jsの継承を使ってみた

gl.enchant.jsを使ったシューティングを作っているが、やはり継承が欲しい!と思ったのでenchant.jsの継承を使ってみた。作ったクラスは敵が発射する弾の部分。いくつかバリエーションが欲しいと思ったので、そのバリエーションの共通する部分を抜き出してEnemyBulletを作った。そしてそれを実際の弾となるクラスで継承して、それらの差となるコンストラクタと行動部分だけ作った。さて、敵の種類を増やすぞ!

//敵機の弾の共通部分
var EnemyBullet = Class.create({
    initialize: function(){
        //敵の放つ弾
        this.object = new Sphere();

        //初期位置は見えない所
        this.object._x = -12;
        this.object._y = 0;
        this.object._z = -12;

        //弾の大きさ調整
        this.object.scale(0.1, 0.1, 0.3);

        //弾の色
        this.object.mesh.setBaseColor([0.8, 0.8, 0.2, 0.8]);

        //弾が有効かどうか
        this.enable = false;
    },
    
    //弾を発射する
    fire: function(x, y){
        //弾の発射位置調整
        this.object._x = x;
        this.object._z = y;
        this.object.translate(0, 0, 0.2);
        
        //弾は有効状態に
        this.enable = true;
    }
});

//敵の弾A 直進タイプ
var EnemyBulletA = Class.create(EnemyBullet, {
    initialize: function(dx, dy, dz){
        EnemyBullet.call(this);
        
        //弾の移動方向
        this.dx = dx;
        this.dy = dy;
        this.dz = dz;
    },

    //弾の移動
    action: function(shooting){
        if(this.enable){
            //直進する
            this.object.translate(this.dx, this.dy, this.dz);
            
            //ある地点を超えたら無効にする
            if(this.object._z > 10){
                this.enable = false;
            }
            
            //自機との距離が一定範囲内なら自機にダメージを与える
            if(Distance.getDistance(this.object, shooting.player.object) < 0.5){
                shooting.explode(shooting.player.object._x, shooting.player.object._z);
                enable = false;
                this.object.translate(-24, 0, -24);
                shooting.playerDamage();
            }
        }
    }
});