自機(Player)の座標が正確に取得できず困っています。
自分で色々と調べてみたところ以下のコードのPLAYER::GetPositionが自機の初期位置(x=180,y=420)を代入してしまっている事が分かりました。
おそらくこれが原因だと思うのですが、解決方法が分かりませんでした。
私のイメージではPLAYER::GetPositionは自機の今現在の座標を*x,*yに代入するものだと思っていたのですが、上記のように意図した座標とは違う値が代入されていました。
どのようにすれば正確な自機の座標が取得できるのでしょうか?。稚拙な文章で申し訳ありませんがどなたかアドバイスをお願いします。
#include "pch.h"
#include "player.h"
#include "control.h"
PLAYER::PLAYER(){
gh=LoadGraph("dat/画像/自機/001.png");
psgh=LoadGraph("dat/画像/自機/ショット/0.png");
memset(shot,0,sizeof(shot));
speed=3.0; //スピード
count=0;//カウント
//初期位置
x=180;
y=420;
//移動制御
sayu=zyoge=0;
naname=1.0;
life=true;// 生きてるかどうか
for(int i=0;i<PSHOT_MAX;i++){
shot[i].flag=false;
shot[i].gh=psgh;
}
}
//現在のplayerの位置を代入//(バグ)初期位置が代入されている
void PLAYER::GetPosition(double *x,double *y){
*x=this->x;
*y=this->y;
//DrawFormatString(50,50,GetColor(255,255,255),"player差出座標(%f,%f)",this->x,this->y);
}
void PLAYER::Move(){
sayu=zyoge=0;
naname=1.0;
//左右どちらかの入力があったら
if(key[KEY_INPUT_RIGHT]==1 || key[KEY_INPUT_LEFT]==1){
sayu=1;
}
//上下どちらかの入力があったら
if(key[KEY_INPUT_UP]==1 || key[KEY_INPUT_DOWN]==1){
zyoge=1;
}
//左右、上下どちらも押されていたら
if(sayu == 1 && zyoge == 1){
naname=sqrt(2.0);
}
//キャラの移動
if(key[KEY_INPUT_RIGHT]==1){
x+=speed/naname;
}
if(key[KEY_INPUT_LEFT]==1){
x-=speed/naname;
}
if(key[KEY_INPUT_UP]==1){
y-=speed/naname;
}
if(key[KEY_INPUT_DOWN]==1){
y+=speed/naname;
}
//キャラの移動制御
if(x<FIELD_START_X){
x+=speed/naname;
}
if(x>FIELD_MAX_X){
x-=speed/naname;
}
if(y<FIELD_START_Y){
y+=speed/naname;
}
if(y>FIELD_MAX_Y){
y-=speed/naname;
}
}
void PLAYER::Shot(){
//発射出来る弾を探しフラグを立てる
if(key[KEY_INPUT_Z]==1 && count%6==0){
for(int i=0;i<PSHOT_MAX;i++){
if(shot[i].flag==false){
shot[i].flag=true;
shot[i].angle=-PI/2;
shot[i].speed=10;
shot[i].x=x;
shot[i].y=y;
break;
}
}
}
//フラグの立っている弾の移動
for(int i=0;i<PSHOT_MAX;i++){
double h_x=shot[i].speed+17/2;//スピード+自機画像/2
double h_y=shot[i].speed+21/2;
if(shot[i].flag==true){
shot[i].y+=sin(shot[i].angle)*shot[i].speed;
shot[i].x+=cos(shot[i].angle)*shot[i].speed;
}
//画面外の弾のフラグをおろす
if(shot[i].x < -h_x || shot[i].x > FIELD_MAX_X+h_x || shot[i].y < -h_y || shot[i].y > FIELD_MAX_Y+h_y){
shot[i].flag=false;
}
}
}
void PLAYER::Draw(){
//プレイヤーの描画
if(life){
DrawRotaGraph(x,y,1.0,0.0,gh,TRUE);
}
//弾の描画
for(int i=0;i<PSHOT_MAX;i++){
if(shot[i].flag==true){
DrawRotaGraph(shot[i].x-12,shot[i].y,1.0,shot[i].angle+(-PI/2),shot[i].gh,TRUE);
DrawRotaGraph(shot[i].x+12,shot[i].y,1.0,shot[i].angle+(-PI/2),shot[i].gh,TRUE);
}
}
//DrawFormatString(50,20,GetColor(255,255,255),"player座標(%f,%f)",this->x,this->y);
}
void PLAYER::All(){
Move();
Shot();
Draw();
count++;
}