ラスボス弾発射について
Posted: 2009年8月06日(木) 11:08
今日までにBGMやSE以外のプログラムをすべて終えたくて
ここ2,3日徹夜の日々をすごしていました。
すみません、今日はまた、しばらくわからないところ・どうしていいかわからないところを
何度も書き込ませていただくかもしれません。
今詰まっているのはラスボスの弾の発射についてです。
まずはソースを。
//砲台
struct CANON
{
int C_HP;//体力は1つ16
double CanonX;
double CanonY;
//自身が生きているか
int CanonFlag;
//弾が生きているか
int TamaFlag;
int CKankaku;
int TamaX, TamaY;
};
//ボスクラス
class Boss
{
CANON Canon[5];
~~~~
};
void Boss::boss3
{
//体力がゼロより低ければ、消滅
if(Canon.C_HP <= 0) Canon.CanonFlag = 0;
if( BT3_Set == 1)
{
//敵の座標
double X,Y;
X = sin(B3Target_angle) * BSpeed;
Y = cos(B3Target_angle) * BSpeed;
Boss3X -= X;
Boss3Y -= Y;
//砲台を制御するためのs
int sX = 0,sY = 0;
if(Boss3X < 0){
Boss3X = 0;
sX = 1;
}
if(Boss3X > 640-160){
Boss3X = 640-160;
sX = 1;
}
if(Boss3Y < 0){
Boss3Y = 0;
sY = 1;
}
if(Boss3Y > 352-160){
Boss3Y = 352-160;
sY = 1;
}
for(int i = 0; i < 5; ++i){
if(sX == 0)Canon.CanonX -= X;
if(sY == 0)Canon.CanonY -= Y;
}
}
//X軸が320以上なら、左向き画像・逆なら逆画像
if(Boss3X > 320)
{
DrawGraph( (int)Boss3X, (int)Boss3Y, Boss3[0], TRUE);
}
else
{
DrawGraph( (int)Boss3X, (int)Boss3Y, Boss3[1], TRUE);
}
//砲台の数だけループしつつ、砲台を描画
for(int i = 0; i < 5; ++i)
{
if(Canon.CanonFlag == 1){
int a = 0;
//隙間的な意味
int p = 0;
if(Boss3X > 320){}
else{
a = 1;
p = 140+2;
}
DrawGraph((int)Canon.CanonX+p, (int)Canon.CanonY, BCanon[a],TRUE);
}
}
//攻撃
for(int i = 0; i < 5; ++i)
{
if(Canon.CanonFlag == 1 && Canon.CKankaku == 0)
{
int a = 0;
int p = 0;
if(Boss3X > 320){}
else{
a = 1;
p = 140+2;
}
Canon.TamaX = Boss3X+3;
Canon[i].TamaY = Boss3Y+3;
if( Boss3X > 320)
{
CMuki = 1;
}
else
{
CMuki = 0;
}
Canon[i].CKankaku = 1;
Canon[i].TamaFlag = 0;
}
if(Canon[i].CanonFlag == 1 && Canon[i].CKankaku == 1 && Canon[i].TamaFlag == 1)
{
if( CMuki = 1 )
{
Canon[i].TamaX -= BTSpeed;
}
if( CMuki = 0 )
{
Canon[i].TamaX += BTSpeed;
}
Canon[i].TamaFlag = 0;
}
//弾のフラグで持っていた場合に発射するようにしようか迷ってます。
/*if(Canon[i].TamaFlag == 1)
{
if( CMuki = 1 )
{
Canon[i].TamaX -= BTSpeed;
}
if( CMuki = 0 )
{
Canon[i].TamaX += BTSpeed;
}
Canon[i].TamaFlag = 0;
}*/
//弾が画面外に出た場合は、存在状態を保持している変数を代入する。
if(Canon[i].TamaX >= 640 || Canon[i].TamaX <= -16)
{
Canon[i].CKankaku++;
if(Canon[i].CKankaku >= KANKAKU)
{
Canon[i].TamaFlag = 0;
}
}
DrawGraph( Canon[i].TamaX, Canon[i].TamaY, BTama, TRUE);
}
}
クラスの定義の前に、構造体を作っています。
ラスボスのクラスの中に、3つのボスを書いており、関数ごとに分けております。
今は、そのラスボスを書いており、ラスボスには5つの砲台が(16掛16)そなえ
られおり、ひとつに16体力を持っています。
つまり、このラスボスは5つの砲台をすべて倒せば消滅というもので、ボス自体の動きは
ホーミング、つまり自機を追っています。
こちらには書いていませんが、角度を取る関数もまた別のところで記しています。
現在では、ボスに砲台を取り付けることに成功しました。
ボスは自分の身長ぐらい(ボス大きさ160掛160)のたてを構えており、そのたてに上下
レーザの筒と、砲台縦5つを設置しています。
レーザはまだ、書いておりません。
砲台から弾が飛び出て、間をおいて飛び出してくるように書いているのですが・・なにやらデバッカの警告
が出てきてしまって・・上記のソースになにやら書いては危ないことを書き込んでいるのですが、
それがわかりません。
また、最初に砲台があることと、弾の発射の間隔を0として弾などを設定しています。
どこか飛び出すかは・・微調整が必要なため、まだ適当な数字しか入れておりません。
ご指摘・アドバイスがほしいところは、そのデバッカの原因であるソースの一文を教えてほしいことと、
弾のフラグから発射について書きたいのだが、現段階のソースをどのように変えればいいのでしょうか?
どうぞ、よろしくお願いします。
ここ2,3日徹夜の日々をすごしていました。
すみません、今日はまた、しばらくわからないところ・どうしていいかわからないところを
何度も書き込ませていただくかもしれません。
今詰まっているのはラスボスの弾の発射についてです。
まずはソースを。
//砲台
struct CANON
{
int C_HP;//体力は1つ16
double CanonX;
double CanonY;
//自身が生きているか
int CanonFlag;
//弾が生きているか
int TamaFlag;
int CKankaku;
int TamaX, TamaY;
};
//ボスクラス
class Boss
{
CANON Canon[5];
~~~~
};
void Boss::boss3
{
//体力がゼロより低ければ、消滅
if(Canon.C_HP <= 0) Canon.CanonFlag = 0;
if( BT3_Set == 1)
{
//敵の座標
double X,Y;
X = sin(B3Target_angle) * BSpeed;
Y = cos(B3Target_angle) * BSpeed;
Boss3X -= X;
Boss3Y -= Y;
//砲台を制御するためのs
int sX = 0,sY = 0;
if(Boss3X < 0){
Boss3X = 0;
sX = 1;
}
if(Boss3X > 640-160){
Boss3X = 640-160;
sX = 1;
}
if(Boss3Y < 0){
Boss3Y = 0;
sY = 1;
}
if(Boss3Y > 352-160){
Boss3Y = 352-160;
sY = 1;
}
for(int i = 0; i < 5; ++i){
if(sX == 0)Canon.CanonX -= X;
if(sY == 0)Canon.CanonY -= Y;
}
}
//X軸が320以上なら、左向き画像・逆なら逆画像
if(Boss3X > 320)
{
DrawGraph( (int)Boss3X, (int)Boss3Y, Boss3[0], TRUE);
}
else
{
DrawGraph( (int)Boss3X, (int)Boss3Y, Boss3[1], TRUE);
}
//砲台の数だけループしつつ、砲台を描画
for(int i = 0; i < 5; ++i)
{
if(Canon.CanonFlag == 1){
int a = 0;
//隙間的な意味
int p = 0;
if(Boss3X > 320){}
else{
a = 1;
p = 140+2;
}
DrawGraph((int)Canon.CanonX+p, (int)Canon.CanonY, BCanon[a],TRUE);
}
}
//攻撃
for(int i = 0; i < 5; ++i)
{
if(Canon.CanonFlag == 1 && Canon.CKankaku == 0)
{
int a = 0;
int p = 0;
if(Boss3X > 320){}
else{
a = 1;
p = 140+2;
}
Canon.TamaX = Boss3X+3;
Canon[i].TamaY = Boss3Y+3;
if( Boss3X > 320)
{
CMuki = 1;
}
else
{
CMuki = 0;
}
Canon[i].CKankaku = 1;
Canon[i].TamaFlag = 0;
}
if(Canon[i].CanonFlag == 1 && Canon[i].CKankaku == 1 && Canon[i].TamaFlag == 1)
{
if( CMuki = 1 )
{
Canon[i].TamaX -= BTSpeed;
}
if( CMuki = 0 )
{
Canon[i].TamaX += BTSpeed;
}
Canon[i].TamaFlag = 0;
}
//弾のフラグで持っていた場合に発射するようにしようか迷ってます。
/*if(Canon[i].TamaFlag == 1)
{
if( CMuki = 1 )
{
Canon[i].TamaX -= BTSpeed;
}
if( CMuki = 0 )
{
Canon[i].TamaX += BTSpeed;
}
Canon[i].TamaFlag = 0;
}*/
//弾が画面外に出た場合は、存在状態を保持している変数を代入する。
if(Canon[i].TamaX >= 640 || Canon[i].TamaX <= -16)
{
Canon[i].CKankaku++;
if(Canon[i].CKankaku >= KANKAKU)
{
Canon[i].TamaFlag = 0;
}
}
DrawGraph( Canon[i].TamaX, Canon[i].TamaY, BTama, TRUE);
}
}
クラスの定義の前に、構造体を作っています。
ラスボスのクラスの中に、3つのボスを書いており、関数ごとに分けております。
今は、そのラスボスを書いており、ラスボスには5つの砲台が(16掛16)そなえ
られおり、ひとつに16体力を持っています。
つまり、このラスボスは5つの砲台をすべて倒せば消滅というもので、ボス自体の動きは
ホーミング、つまり自機を追っています。
こちらには書いていませんが、角度を取る関数もまた別のところで記しています。
現在では、ボスに砲台を取り付けることに成功しました。
ボスは自分の身長ぐらい(ボス大きさ160掛160)のたてを構えており、そのたてに上下
レーザの筒と、砲台縦5つを設置しています。
レーザはまだ、書いておりません。
砲台から弾が飛び出て、間をおいて飛び出してくるように書いているのですが・・なにやらデバッカの警告
が出てきてしまって・・上記のソースになにやら書いては危ないことを書き込んでいるのですが、
それがわかりません。
また、最初に砲台があることと、弾の発射の間隔を0として弾などを設定しています。
どこか飛び出すかは・・微調整が必要なため、まだ適当な数字しか入れておりません。
ご指摘・アドバイスがほしいところは、そのデバッカの原因であるソースの一文を教えてほしいことと、
弾のフラグから発射について書きたいのだが、現段階のソースをどのように変えればいいのでしょうか?
どうぞ、よろしくお願いします。