忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

自機狙い弾を追加してみました。
s-WS000334.jpg
とりあえず10フレームに1回発射するようにしています。
プロジェクトファイルはコチラ↓
https://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1239168186

自機狙い弾についてはコチラで詳しく書いていますが、サイン、コサイン、アークタンジェントを
使って計算しています。
プログラムとしてはこんな感じ↓
////////////////////////////敵弾発生処理////////////////////////////////////////////////////////////
//引数 x軸敵位置、y軸敵位置
//返値 なし
void teki01tama(int x,int y){
 int i;
 double r=0.;//敵弾角度
 double ds=5.;//弾の速さ
 
for(i=0;i<ENEMY_TAMA_MAX;i++){//敵弾初期化
if(enemy_tama[i].etf==0) {
enemy_tama[i].etf=1;//弾の存在を有に
enemy_tama[i].etx=x+24;//初期位置
enemy_tama[i].ety=y+24;
r=atan2((ch.y+24)-(y+24), (ch.x+24)-(x+24));//敵と自機との角度を求める
enemy_tama[i].etr=r;
enemy_tama[i].etmx=cos(r)*ds;//移動量
enemy_tama[i].etmy=sin(r)*ds;
 break;
 }
}
}
////////////////////////////////////////////////////////////////////////////////////////
このteki01tama関数でまず自機と敵の角度を調べて、弾の移動方向を決めます。
2点の角度を調べるにはアークタンジェントを使うのですが、HSPの場合はatanのみで良かった
のですがC言語の場合はatan2関数「double atan2(double y, double x)」となるようです。
なので、このatan2関数を使ってr=atan2((ch.y+24)-(y+24), (ch.x+24)-(x+24))みたいな
感じで角度を調べます。
ついでに敵弾画像回転用にenemy_tama[i].etr=r;として角度を代入しておきました。
で、サインとコサインで移動量を計算します。
enemy_tama[i].etmx=cos(r)*ds;
enemy_tama[i].etmy=sin(r)*ds;
こんな感じ。
ちなみにatan2関数を使う為には#include <math.h>の記述が必要です。

次は弾の移動です。
敵弾の移動関数はこんな感じ↓
/////////////////////////////敵弾移動処理///////////////////////////////////////////////////////////
//引数 なし
//返値 なし
void tekitamamove(){
 int i;
 g_tekitamacount=0;
for(i=0;i<ENEMY_TAMA_MAX;i++){//敵弾初期化
 if(enemy_tama[i].etf==1) {//敵弾が画面にある時
  g_tekitamacount++;
  enemy_tama[i].etx=enemy_tama[i].etx+enemy_tama[i].etmx;//敵弾移動
  enemy_tama[i].ety=enemy_tama[i].ety+enemy_tama[i].etmy;
  DrawRotaGraph( enemy_tama[i].etx , enemy_tama[i].ety , 1.0f , enemy_tama[i].etr , g_tekitama01 , TRUE ) ;//敵弾表示
  if(enemy_tama[i].etx>500) enemy_tama[i].etf=0;//画面からはみ出したら削除
  if(enemy_tama[i].etx<140  ) enemy_tama[i].etf=0;
  if(enemy_tama[i].ety>480) enemy_tama[i].etf=0;
  if(enemy_tama[i].ety<-48  ) enemy_tama[i].etf=0;
  }
 }
}
////////////////////////////////////////////////////////////////////////////////////////
弾の現在の座標enemy_tama[i].etx , enemy_tama[i].ety に
移動量enemy_tama[i].etmx , enemy_tama[i].etmyを足してDrawRotaGraph関数を使って
自機の方向に回転させて表示させています。

PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
Twitter
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]