中ボスが逃げる方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kai

中ボスが逃げる方法

#1

投稿記事 by kai » 15年前

こんにちは。
再び龍神録50章についてですが、
今度は東方みたいに中ボスを倒したら
消滅させるのではなく、画面上部に逃げてから
boss.flagを消すように実装したいのですがうまくいかなくて困ってます・・
boss_shot.cpp内に新しく作った
#define BOSS_POS2_X (FMX/2)		//ボスの逃げる位置
#define BOSS_POS2_Y (-50)
//物理的計算をさせる登録をする(指定時間tで定位置に戻す)
void input_phy2(int t){	//t=移動にかける時間
	double ymax_x,ymax_y;
	if(t==0)t=1;
	boss.phy.flag=1;				//登録オン
	boss.phy.cnt=0;					//カウンタ初期化
	boss.phy.set_t=t;				//移動にかける時間をセット
	ymax_x=boss.x-BOSS_POS2_X;		//移動したい水平距離
	boss.phy.v0x=2*ymax_x/t;		//水平成分の初速度
	boss.phy.ax =2*ymax_x/(t*t);	//水平成分の加速度
	boss.phy.prex=boss.x;			//初期x座標
	ymax_y=boss.y-BOSS_POS2_Y;		//移動したい鉛直距離
	boss.phy.v0y=2*ymax_y/t;		//鉛直成分の初速度
	boss.phy.ay =2*ymax_y/(t*t);	//鉛直成分の加速度
	boss.phy.prey=boss.y;			//初期y座標
}
これをうまく活用したいのですが
何か良い方法はないでしょうか?
よろしくお願いします・・

Dixq (管理人)

Re:中ボスが逃げる方法

#2

投稿記事 by Dixq (管理人) » 15年前

ちょっと今サンプルがかける環境ではないのですが、
普通に画面外の座標にセットしたのではだめなのでしょうか?

トゥル太郎

Re:中ボスが逃げる方法

#3

投稿記事 by トゥル太郎 » 15年前

input_phy_posを使うといいんじゃないかと思います。

kai

Re:中ボスが逃げる方法

#4

投稿記事 by kai » 15年前

確かに
input_phy_pos(FMX/2,-50, 50)
これを使うと便利ですね・・
ただ、
if(boss.knd==boss.danmaku_num[0] || boss.knd==boss.danmaku_num[1]){//出すべき弾幕をだしきったら
   boss.flag=0; //消す
   enter_dn(10,40); //(45)
   se_flag[9]=1; //ボスが死んだ音
   return ;
}
else{
   enter_boss(1); //次の弾幕を登録
}
ここをどういじればいいのかよく分からないのです・・
サンプルお願いします・・

kokoro

Re:中ボスが逃げる方法

#5

投稿記事 by kokoro » 15年前

横からすみませんが
私も知りたいです。私も出来なくて困ってました・・

kai

Re:中ボスが逃げる方法

#6

投稿記事 by kai » 15年前

input_phy_pos(FMX/2,-50, 50) を使うとバグってしまうのですが・・

pooka

Re:中ボスが逃げる方法

#7

投稿記事 by pooka » 15年前

あまりテストしてませんがこんな感じでどうでしょうか?
//boss_shot.cpp
#define BOSS_POS2_X (FMX/2)    //ボスの逃げる位置
#define BOSS_POS2_Y (-50)
#define BOSS_MOVE_TIME 50      //移動時間

if(boss.knd == boss.danmaku_num[0])
{
    boss.state = 3;
    input_phy_pos(BOSS_POS2_X, BOSS_POS2_Y, BOSS_MOVE_TIME);
}
else if(boss.knd == boss.danmaku_num[1])
    //出すべき弾幕をだしきったら
{
    boss.flag=0;//消す


    //略


if(boss.state == 2)    //弾幕中なら
{
    boss_shot_bullet[boss.knd]();    //弾幕関数へ
    boss_shot_calc();                //弾幕計算
}
if(boss.state == 3)
{
&#160;&#160;&#160;&#160;if(boss.y&#160;<=&#160;BOSS_POS2_Y&#160;+&#160;1)
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;boss.flag&#160;=&#160;0;
&#160;&#160;&#160;&#160;}
}

kai

Re:中ボスが逃げる方法

#8

投稿記事 by kai » 15年前

ありがとうございます。
無事出来たのですが、よく東方をみたら、
中ボスを倒したら、倒した位置で数カウント停止したのち
上に逃げるのですが、数カウント停止は出来ないのでしょうか?

pooka

Re:中ボスが逃げる方法

#9

投稿記事 by pooka » 15年前

例えば
#define&#160;BOSS_WAIT_TIME&#160;100
として
if(boss.knd&#160;==&#160;boss.danmaku_num[0])&#160;
{&#160;
&#160;&#160;&#160;&#160;boss.state&#160;=&#160;3;&#160;
&#160;&#160;&#160;&#160;input_phy_pos(BOSS_POS2_X,&#160;BOSS_POS2_Y,&#160;BOSS_MOVE_TIME);&#160;
}

if(boss.knd==boss.danmaku_num[0])
{
&#160;&#160;&#160;&#160;boss.state&#160;=&#160;3;
}


if(boss.state&#160;==&#160;3)&#160;
{&#160;
&#160;&#160;&#160;&#160;if(boss.y&#160;<=&#160;BOSS_POS2_Y&#160;+&#160;1)&#160;
&#160;&#160;&#160;&#160;{&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;boss.flag&#160;=&#160;0;&#160;
&#160;&#160;&#160;&#160;}&#160;
}

if(boss.state&#160;==&#160;3)
{
&#160;&#160;&#160;&#160;static&#160;int&#160;cnt&#160;=&#160;boss.cnt;
&#160;&#160;&#160;&#160;if(boss.cnt&#160;-&#160;cnt&#160;==&#160;BOSS_WAIT_TIME)
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;input_phy_pos(BOSS_POS2_X,&#160;BOSS_POS2_Y,&#160;BOSS_MOVE_TIME);
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;if(boss.y&#160;<=&#160;BOSS_POS2_Y+1)
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;boss.flag&#160;=&#160;0;
&#160;&#160;&#160;&#160;}
}
でどうでしょうか。
真上に逃げるのであればBOSS_POS2_Xも変更してください。

kai

Re:中ボスが逃げる方法

#10

投稿記事 by kai » 15年前

pookaさんのを参考にさらに色々いじったら
無事、実装できました。
ありがとうございました!

kai

Re:中ボスが逃げる方法

#11

投稿記事 by kai » 15年前

自己解決しました

閉鎖

“C言語何でも質問掲示板” へ戻る