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(); } } } });