トップページへ
 攻撃パターン
・魔法(5連弾)   | 利用規約 | 使い方 | 操作方法 |
■説明
弾を5発連続で発射する魔法です。弾は壁を通り越すことができないようになっています。
■参考
攻撃とダメージ処理 - 自機の攻撃動作
攻撃パターン - 弓矢
■解説
流れとしては、(1)腕を突き出すアニメーション、(2)魔法5連弾呼び出し(時間を置いて弾を呼び出す)、(3)弾の描画、という処理になります。

function Attack(){
  if (getkey(90)==1 && onAttack==0 && AttackOK==0) {
    onAttack=1;
    appear(new Effect(x,y,"Magic"));
  }
}

このあたりは攻撃パターン - 弓矢と同じなので割愛します。

  $Effectクラス(一部)
if (p=="Magic"){
  p=-1;
  zOrder=-7;
  anim=newAnimation();
  anim.swing($pat_weapon+2,$pat_weapon+2,3);
  $Mychar.p=$pat_chara+2;
  for (i=0;i<60;i++){
    x=$Mychar.x+$Mychar.f*15;
    y=$Mychar.y+3;
    drawSprite($Mychar.x+$Mychar.f*9,$Mychar.y+3,$pat_arm+0,
                                   $Mychar.f, 1);
    if (i==20) appear(new Effect(x,y,"Fire-5Rendan"));
    update();
  }
  $Mychar.onAttack=0;
}

if (p=="Fire-5Rendan"){
  p=-1;
  for (i=0;i<5;i++){
    appear(new Weapon_My(x,y,"fire",90));
    wait(7);
  }
}

 if (p=="Magic")・・・の部分が、上で述べた 『(1)腕を突き出すアニメーション』 の部分になります。魔法を発射する前のタメを作るところでもあります。やっていることは簡単で、自機の前に腕を書いて、キラキラしているアニメーションを、さらに腕の前に描いているだけです。iを0から60までカウントして、20になったら弾を撃つ処理に入ります。具体的にはもう一度Effectクラスを、引数を変えて(p="Fire-5Rendan"にして)呼び出します。
if (p=="Fire-5Rendan")・・・の部分は弾をウェイトをかけながら5発打つ部分です。
実際の弾の飛び方は$Weapon_Myクラスで記述します。


  $Weapon_Myクラス(一部)
if (p=="fire"){
  ATC=3; erase=1;
  ang=f;
  x=$Mychar.x+$Mychar.f*10;
  y=$Mychar.y;
  f=$Mychar.f;
  p=$pat_weapon+1;
  zOrder=3;
  ang=ang*f;
  vx=9*cos(ang-90); vy=6*sin(ang-90);
  for (i=0;i<80;i++) {
    tx=x; ty=y;
    x+=vx; y+=vy;
    if (f== 1) angle=angle(tx-x,ty-y)+180;
    if (f==-1) angle=angle(tx-x,ty-y);
    if ($map.getAt(x,y)>=$pat_block+20 && $map.getAt(x,y)
                          <=$pat_block+39) die();
    update();
  }
}

 $Effectが呼び出された時点で、pには"fire"という文字列が、fには90という数値が入っています。90は弾の発射の角度として引数を渡したいので、これをangという変数で受け取ります。あとの処理は攻撃パターン - 弓矢と同じです。違いは、重力を付加している部分を取ったことと、弾が壁にあたったときに弾をすぐに消去するようにしたことだけです。




|  トップページ | このサイトについて | 利用規約 | ご意見・お問い合わせ |

TonyuアクションRPG - ゲームプログラミング解説 -