トップページへ
 攻撃パターン
・魔法(対地弾)   | 利用規約 | 使い方 | 操作方法 |
■説明
壁にあたると方向を変えて進み、敵を貫通します。自機が入り込めない場所へも攻撃できます。
■参考
攻撃とダメージ処理 - 自機の攻撃動作
攻撃パターン - 魔法(5連弾)
攻撃パターン - 魔法(反射弾)
■解説
攻撃パターン - 魔法(反射弾)と同じく、地形を判定して進行方向を決定します。

  $Weapon_Myクラス(一部)
if (p=="rotate"){
  x=$Mychar.x+$Mychar.f*20;
  y=$Mychar.y;
  p=$pat_weapon+1;
  f=$Mychar.f;
  erase=0; //敵に当たったとき貫通
  ATC=3; //攻撃力

  while(1){  //壁にタッチしていない場合壁にあたるまで落下を続ける
    WallHit_chk2();
    if (wY==0 || wY==-1) y+=3;
    if (wY==1 || wY== 2) break;
    update();
  }
  for(i=0;i<500;i++){
    WallHit_chk2();
    if (f==-1){ //左回りの移動部
      if (wX== 1 && wY== 0) vy= 1;
      if (wX== 1 && wY== 1) vx=-1;
      if (wX== 0 && wY== 1) vx=-1;
      if (wX==-1 && wY== 1) vy=-1;
      if (wX==-1 && wY== 0) vy=-1;
      if (wX==-1 && wY==-1) vx= 1;
      if (wX== 0 && wY==-1) vx= 1;
      if (wX== 1 && wY==-1) vy= 1;
      if (wX== 0 && wY== 0) {
         if(isblock($map.getAt(x+14,y+14))) vy= 1;
         if(isblock($map.getAt(x+14,y-14))) vx= 1;
         if(isblock($map.getAt(x-14,y-14))) vy=-1;
         if(isblock($map.getAt(x-14,y+14))) vx=-1;
      }
      angle-=3;
    }
    if (f==1){ //右回りの移動部
      ・・・中略
    }
    x=x+vx; y=y+vy;
    if (i%3==0) update(); //数値3を変えると速度が変化します。
    if (isblock($map.getAt(x ,y))) die(); //壁にめり込んだら消去
    if (isblock($map.getAt(x-8,y))) die();
    if (isblock($map.getAt(x+8,y))) die();
    if (abs(angle)>=360) angle=0;
    vx=0; vy=0;
  }
}


弾の周りに壁が存在しない場合、座標yに3を足しつづけ、壁に接触するまで落下を続けます。壁に接触したら、自機の向きに応じて、左回りか右回りかを決定します。
あとは壁の接触状態(下に接しているか、右に接しているかなど)で速度vx,vyを決定し、x,yに足しこんで移動が完了します。
壁際で魔法を使った場合、弾がめり込むので動きがとれなくなります。この防止策のため、めり込んだら消去する文を3つ追加しています。




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

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