「日記2010年10月その1」の編集履歴(バックアップ)一覧に戻る
//大砲を表現するクラス
this.hp= hp;//ヒットポイント //this.bmp = new Image("e_CannonBody.jpg");//キャノン本体の画像jscriptは久しぶりなのでこれでよかったかちょっと記憶が、、、、 //this.Cannon = new Image("e_Cannon.jpg");キャノンの砲身の画像 this.AttackTimer= timer;//攻撃間隔 this.rndTimer = rndTimer;//攻撃間隔のランダムな揺らぎのサイズ this.BulletSpeed=BulletSpeed;//弾速
this.round=0;//大砲の砲身の角度を表す変数 this.nextAttackTimer=100;//fps計算一回ごとに1引かれる変数、これが0以下になると弾発射処理が行われ、nextAttackTimerは再セットされる。 this.r=30//大砲のサイズ
this.attack = function() { //放物線を描いて飛ぶ大砲の弾。これを発射しeBullet_manageに弾を登録するメソッド;
// 主人公機と自機のX,Y座標の差分にあわせて、 //微分と2次曲線の性質なんて何て懐かしい var x1=myUnit.x-this.x; var y1=myUnit.y-this.y; var k=0.5*g*x1*x1/(this.BulletSpeed*this.BulletSpeed); var d=x1*x1-4*k*(k+y1); //弾が届く位置に敵がいたらd>0となるので発射 if(d>0){ var s=(x1+Math.sqrt(d))/(2*k); var t=Math.sqrt(1+s*s); var cb=CannonBullet(this.x,this.y,this.BulletSpeed/t,this.BulletSpeed*s/t); //弾を生成したので、弾を管理するデータ型に管理させる。これはサブルーチンに渡して処理を行う。 //ホテルの空き部屋を探すのと同じ処理でまず空いてる場所を探す } this.raunchingR_Set=function(){
} } this.nextAttackCheck=function(){ // }
this.x=x; this.y=y;
function CannonBullet(x,y,xSpeed,ySpeed){ //大砲から発射される弾を表現するデータ、弾は大地と接触する、もしくは画面の右端、左端に到達するまで放物線を描いて飛び、到達、着弾と同時に画面から消失する
this.x=x; this.y=y; this.xSpeed=xSpeed; this.ySpeed=ySpeed; this.state=0//大砲の弾の状態、0なら移動中、1なら着弾し爆発エフェクト this.nextCalcCount=10;//ここで指定した数nだけ、nFPS過ぎるまで直線移動で近似 this.explosionTimer=10;//爆発の持続時間 this.explosionSize=10;//爆発時のサイズ,ゲーバラとあわせてよく考える必要あり this.nextX;//弾の移動後の位置 this.nextY;//弾の移動後の位置 this.move=founction (){ //弾の移動state=0なら移動処理; //state=1なら爆発アニメ,explosionTimeを1減らし、これが0以下になるまでは爆発効果 //計算により弾が地面とぶつかることが判明した場合、state=1に変更、弾を爆発させる。 } }