アドバイスありがとうございます!
返信遅くなってしまって申し訳ございません・・
>>外部から直接変更させない。
なんと・・Map.cppで壁にぶつかったら、プレイヤーの移動量を減らす、というプログラムを作りたかったのですが、そうなると、外部から変更することになってしまうので、
壁にぶつかったらそのデータをPlayer.cpp渡して、そこで移動量を減らす、としたほうがいいですか?
また、int Get_PlayerData()関数を作って、外部からアクセスできるようにしたのですが、なぜか反映されません。恐らく、ただコピーが作られているからだと思います。
しかし、実体→Get_PlayerData()→ポインタ→書き換えとしてるので、コピーのはずがないのですが・・・。どこが問題なのでしょうか?
Map.cpp
コード:
static int MAP_DATA[Map_WIDTH][Map_HEIGHT];//マップデータ
static Player *Player_s;//プレイヤーデータ
void Map_Initialize(){
//マップの初期化(壁作り)
}
void Map_Draw(){
//マップの描画(Line関数で縦線を表示)
}
//問題の箇所
void Map_hit(){
int flag=0;
Player_s = &Player_Get();//プレイヤー座標更新
for( i<Map_WIDTH ){
for( k<Map_HEIGHT ){
if( MAP_DATA[i][k] == 1 )
flag = HitBoxRect( i, 680,k,430,Player_s->x,Player_s->x+25,Player_s->y,Player_s->y+32);//短形のあたり判定 当たっていたら1を返す
}
}
if( flag == 1 )
Player_s->x =10;//試しにPlayer_s->xに10を代入してみても、X座標10に瞬間移動しない。
DrawFormatString(0,0,Color,"%lf",Player_s->x);//試しに、X座標を表示させてみると、10と表示される。
}
Player.cpp
コード:
static Player Player_s;//これが実体
void Mgr_Player_Move(){
//移動する
DrawFormatString(0,0,Color,"%lf",Player_s->x);//ここで実行すると、Map.cppでflagが1のときでも10とは表示されず、現在の座標が表示される。
}
void Mgr_Player_Motion(){
//動きアニメーション
}
//プレイヤーの情報を渡す
Player Player_Get(){
return Player_s;//プレイヤーデータを与える
}
新しく立てたほうがいいですか・・?
本当に質問ばかりですみません・・。