ページ 1 / 1
中ボスが逃げる方法
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)
{
    if(boss.y <= BOSS_POS2_Y + 1)
    {
        boss.flag = 0;
    }
}
Re:中ボスが逃げる方法
Posted: 2009年11月10日(火) 02:43
by kai
ありがとうございます。
無事出来たのですが、よく東方をみたら、
中ボスを倒したら、倒した位置で数カウント停止したのち
上に逃げるのですが、数カウント停止は出来ないのでしょうか?
Re:中ボスが逃げる方法
Posted: 2009年11月10日(火) 19:27
by pooka
例えば
#define BOSS_WAIT_TIME 100
として
if(boss.knd == boss.danmaku_num[0]) 
{ 
    boss.state = 3; 
    input_phy_pos(BOSS_POS2_X, BOSS_POS2_Y, BOSS_MOVE_TIME); 
}
を
if(boss.knd==boss.danmaku_num[0])
{
    boss.state = 3;
}
if(boss.state == 3) 
{ 
    if(boss.y <= BOSS_POS2_Y + 1) 
    { 
        boss.flag = 0; 
    } 
}
を
if(boss.state == 3)
{
    static int cnt = boss.cnt;
    if(boss.cnt - cnt == BOSS_WAIT_TIME)
    {
        input_phy_pos(BOSS_POS2_X, BOSS_POS2_Y, BOSS_MOVE_TIME);
    }
    if(boss.y <= BOSS_POS2_Y+1)
    {
        boss.flag = 0;
    }
}
でどうでしょうか。
真上に逃げるのであればBOSS_POS2_Xも変更してください。
Re:中ボスが逃げる方法
Posted: 2009年11月11日(水) 07:14
by kai
pookaさんのを参考にさらに色々いじったら
無事、実装できました。
ありがとうございました!
Re:中ボスが逃げる方法
Posted: 2009年11月12日(木) 19:59
by kai
自己解決しました