弾幕を作っていて、敵に自機狙いショットを打たせたいのですが、下の部分に何かおかしい点があるようです。
どこが間違えているのでしょうか?
tmain2.r[/url]はラジアンを入れる変数です。
tmain2.coscos[/url]はコサインを入れる変数
tmain2.sinsin[/url]はサインを入れる変数
tmain2.r=atan2(tmain2.ty-jiki.ty,tmain2.tx-jiki.tx);
tmain2.coscos=cos(tmain2.r);
tmain2.sinsin=sin(tmain2.r);
自機と敵機の角度
Re:自機と敵機の角度
すみませんが、うまく動きません。
もっと広い範囲のソースを載せます。
//敵2
typedef struct{
double x[50]; //X座標
double y[50]; //Y座標
double tsin,tcos,tr;
double r[10],sinsin[10],coscos[10];//ラジアン,サイン,コサイン
int flag; //フラグ
int tflag[50];
int nagasa[50];
int count; //カウント
int count2;
double tx;
double ty;
int tcounter;
int hp;
}t2;
t2 tmain2;
//自機
typedef struct{
double tx; //X座標
double ty; //Y座標
double x[100];
double y[100];
double x2[100];
double y2[100];
int flag[100];
int hp;
int nagasa[100];
int count;
}jstruct;
jstruct jiki;
//中略//
//敵2/////////////////
if(tmain2.hp>0&&tmain1.hp<=0){
DrawGraph(tmain2.tx,tmain2.ty,tmain,TRUE);
if(tmain2.count<100){
tmain2.ty++;
}
tmain2.count++;
if(tmain2.count2<10){
tmain2.count2++;
}
for(i=0;i<50;i++){
if(tmain2.tflag==0){
tmain2.x=tmain2.tx;
tmain2.y=tmain2.ty;
}
}
if(tmain2.count2>=10){
tmain2.count-0;
for(i=0;i<50;i++){
if(tmain2.tflag==0){
tmain2.tflag=1;
//サインコサイン
tmain2.r=atan2(jiki.ty-tmain2.ty,tmain2.tx-jiki.tx);
tmain2.coscos=cos(tmain2.r);
tmain2.sinsin=sin(tmain2.r);
break;
}
}
}
for(i=0;i<50;i++){
if(tmain2.tflag[i]==1){
tmain2.nagasa[i]+=10;
tmain2.x[i]=tmain2.nagasa[i]*tmain2.coscos[i];
tmain2.y[i]=tmain2.nagasa[i]*tmain2.sinsin[i];
DrawCircle(tmain2.x[i],tmain2.y[i],3,BLACK,TRUE);
}
}
DrawFormatString(0,0,BLACK,"%d",tmain2.tflag[0]);
}
もっと広い範囲のソースを載せます。
//敵2
typedef struct{
double x[50]; //X座標
double y[50]; //Y座標
double tsin,tcos,tr;
double r[10],sinsin[10],coscos[10];//ラジアン,サイン,コサイン
int flag; //フラグ
int tflag[50];
int nagasa[50];
int count; //カウント
int count2;
double tx;
double ty;
int tcounter;
int hp;
}t2;
t2 tmain2;
//自機
typedef struct{
double tx; //X座標
double ty; //Y座標
double x[100];
double y[100];
double x2[100];
double y2[100];
int flag[100];
int hp;
int nagasa[100];
int count;
}jstruct;
jstruct jiki;
//中略//
//敵2/////////////////
if(tmain2.hp>0&&tmain1.hp<=0){
DrawGraph(tmain2.tx,tmain2.ty,tmain,TRUE);
if(tmain2.count<100){
tmain2.ty++;
}
tmain2.count++;
if(tmain2.count2<10){
tmain2.count2++;
}
for(i=0;i<50;i++){
if(tmain2.tflag==0){
tmain2.x=tmain2.tx;
tmain2.y=tmain2.ty;
}
}
if(tmain2.count2>=10){
tmain2.count-0;
for(i=0;i<50;i++){
if(tmain2.tflag==0){
tmain2.tflag=1;
//サインコサイン
tmain2.r=atan2(jiki.ty-tmain2.ty,tmain2.tx-jiki.tx);
tmain2.coscos=cos(tmain2.r);
tmain2.sinsin=sin(tmain2.r);
break;
}
}
}
for(i=0;i<50;i++){
if(tmain2.tflag[i]==1){
tmain2.nagasa[i]+=10;
tmain2.x[i]=tmain2.nagasa[i]*tmain2.coscos[i];
tmain2.y[i]=tmain2.nagasa[i]*tmain2.sinsin[i];
DrawCircle(tmain2.x[i],tmain2.y[i],3,BLACK,TRUE);
}
}
DrawFormatString(0,0,BLACK,"%d",tmain2.tflag[0]);
}
Re:自機と敵機の角度
訂正
tmain2.tyは敵機のY座標
jiki.tyはは自機のY座標
tmain2.txは敵機のX座標
jiki.txは自機のX座標
逆でした。。。
tmain2.tyは敵機のY座標
jiki.tyはは自機のY座標
tmain2.txは敵機のX座標
jiki.txは自機のX座標
逆でした。。。
Re:自機と敵機の角度
double r[10],sinsin[10],coscos[10];//ラジアン,サイン,コサインというように要素を10しか確保していないのに、
for(i=0;i<50;i++){ if(tmain2.tflag==0){ tmain2.tflag=1; //サインコサイン tmain2.r=atan2(jiki.ty-tmain2.ty,tmain2.tx-jiki.tx); tmain2.coscos=cos(tmain2.r); tmain2.sinsin=sin(tmain2.r); break; } }
というようにそれより大きい要素にアクセスしているためデータが壊れていると思います。