ページ 11

中ボスが逃げる方法

Posted: 2009年11月04日(水) 11:44
by kai
こんにちは。
再び龍神録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座標
}
これをうまく活用したいのですが
何か良い方法はないでしょうか?
よろしくお願いします・・

Re:中ボスが逃げる方法

Posted: 2009年11月04日(水) 19:25
by Dixq (管理人)
ちょっと今サンプルがかける環境ではないのですが、
普通に画面外の座標にセットしたのではだめなのでしょうか?

Re:中ボスが逃げる方法

Posted: 2009年11月04日(水) 19:48
by トゥル太郎
input_phy_posを使うといいんじゃないかと思います。

Re:中ボスが逃げる方法

Posted: 2009年11月05日(木) 01:41
by kai
確かに
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); //次の弾幕を登録
}
ここをどういじればいいのかよく分からないのです・・
サンプルお願いします・・

Re:中ボスが逃げる方法

Posted: 2009年11月06日(金) 10:34
by kokoro
横からすみませんが
私も知りたいです。私も出来なくて困ってました・・

Re:中ボスが逃げる方法

Posted: 2009年11月09日(月) 11:07
by kai
input_phy_pos(FMX/2,-50, 50) を使うとバグってしまうのですが・・

Re:中ボスが逃げる方法

Posted: 2009年11月09日(月) 16:09
by pooka
あまりテストしてませんがこんな感じでどうでしょうか?
//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;}
}

Re:中ボスが逃げる方法

Posted: 2009年11月10日(火) 02:43
by kai
ありがとうございます。
無事出来たのですが、よく東方をみたら、
中ボスを倒したら、倒した位置で数カウント停止したのち
上に逃げるのですが、数カウント停止は出来ないのでしょうか?

Re:中ボスが逃げる方法

Posted: 2009年11月10日(火) 19:27
by pooka
例えば
#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も変更してください。

Re:中ボスが逃げる方法

Posted: 2009年11月11日(水) 07:14
by kai
pookaさんのを参考にさらに色々いじったら
無事、実装できました。
ありがとうございました!

Re:中ボスが逃げる方法

Posted: 2009年11月12日(木) 19:59
by kai
自己解決しました