現在、夏休みの課題のSTGの製作をDirectXとC++で、学校からもらったライブラリでしています。
敵3の弾の処理を、自分のいる角度と敵のいる角度から求めて、打った球が壁に当たると跳ね返る、というものが作りたいのですが、
縦の跳ね返りは処理できたと思うのですが、横の処理がどうしてもできません。
C、C++,DirectXは、まだ半年も勉強していない初心者です。
初期化の部分は必要ないと思いましたが、一応使っている変数などがあるので書きました。
使っているソフトは、VisualStudio2008,Microsoft DirectX SDK (August 2007)です。よろしくお願いします。
//初期化
TextureM Enemy; //敵画像
Enemy.Init( pDevice , "Texture/charimg.png" , 320 , 240 );
//敵の弾3(連続直線ショット(自機に常に向かう)用)
int Teki3tamaflag =0; //敵が弾をうっているかどうかの判定
int Teki3Tamafcount=0; //弾と弾の距離を置くためのカウント
int tama3=0;
SpriteM Teki3Tama[10];
float Teki3Tamad[10];
for(int i=0; i<9; i++){
Teki3Tama[i].Init(pDevice,32,32,0,177,&Enemy); //32*32の大きさの画像で0,0の位置から切り出す
Teki3Tama[i].Pos.x =-100; //初期座標
Teki3Tamad[i]=0; //角度
}
//敵2 (常に自機の方へ向かう連続直線ショット)
if(Teki3TamaLife[9] == 0){
Teki3tamaflag = 1;
}
if(Teki3tamaflag == 1){
static int tama3=0;
if(Teki3TamaLife[tama3]==0){
for(int i=0; i<9; i++){
Teki3TamaLife[tama3]=1;
Teki3Tama[tama3].Pos.x= Teki[3].Pos.x;
Teki3Tama[tama3].Pos.y= Teki[3].Pos.y;
if(tama3 == 0 && Teki3Tamafcount == 0){
Teki3Tamad[0] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 1){
Teki3Tamad[1] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 2){
Teki3Tamad[2] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 3){
Teki3Tamad[3] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 4){
Teki3Tamad[4] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 5){
Teki3Tamad[5] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 6){
Teki3Tamad[6] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 7){
Teki3Tamad[7] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 8){
Teki3Tamad[8] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
if(tama3 == 9){
Teki3Tamad[9] = atan2(Jikidainyuu2-Teki[3].Pos.y,Jikidainyuu-Teki[3].Pos.x);
}
}
}
Teki3Tamafcount++;
if(Teki3Tamafcount == 7){
Teki3Tamafcount = 0;
tama3++; //tama1を0に
if(tama3 == 10){
Teki3tamaflag = 0;
tama3 = 0;
}
}
}
//敵3の弾の壁の処理-------------------
for(int i=0; i<9; i++){
if(Teki3Tama[i].Pos.y>740||Teki3Tama[i].Pos.y<30){ //縦の壁の処理
Teki3Tamad[i] = Teki3Tamad[i]-Teki3Tamad[i]-Teki3Tamad[i];
}
if(Teki3Tama[i].Pos.x>1000||Teki3Tama[i].Pos.x<280){ //横の壁の処理
Teki3Tamad[i] = 180 - Teki3Tamad[i]; //ここがうまくいかない
}
}
//敵3の弾の処理 -------------------(常に自機の方へ向かう連続直線ショット)
[code]
for(int i=0; i<9; i++){
if(Teki3TamaLife[i]==1&& tama3 == 0){
Teki3Tama[i].Pos.x += TEKISHOT3*cos(Teki3Tamad[i]);//一度だけ追尾弾
Teki3Tama[i].Pos.y += TEKISHOT3*sin(Teki3Tamad[i]);
Teki3Tama[i].Angle = Teki3Tamad[i];
}
}