現在2Dアクションゲームを作っています。
現在のコードは、右と左を押すと動き自キャラがマップチップを素道りする用になっています
このコードに自キャラがマップチップにあたったら、そちらの方向に行けなくなるようにしたいのですが
調べてみてもイマイチ理解ができずにいます。
以前あったコードを見まねで書いてみたのですが、マップチップと関係ないところで動けなくなりました。
よろしければマップチップとの当たり判定のコードを教えてくれませんか?
よろしくお願いします
#include "Main.h"//ヘッダーの読み込み
int MyGHandle[11];
int Myx=96; //自キャラの初期x座標
int Myy=96; //自キャラの初期Y座標
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
LoadDivGraph("MY.png", 12, 3, 4, 93, 93, MyGHandle);
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0){
//ここに処理を追加
MyMove();
Map();
}
DxLib_End(); // DXライブラリ終了処理
return 0;
} #include "Main.h"//ヘッダーの読み込み
#define MAP_SIZE 32 // マップチップ一つのドットサイズ
#define MAP_WIDTH 20 // マップの幅
#define MAP_HEIGHT 15 // マップの縦長さ
// マップのデータ
int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] =
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
} ;
int i,j;//マップチップの位置
bool RIGHTHit=false;
void Map(){
//ひとつひとつのマップデータを見る
for( i = 0 ; i < MAP_HEIGHT ; i ++ )
{
for( j = 0 ; j < MAP_WIDTH ; j ++ )
{
if( MapData[ i ][ j ] == 0 )//マップデータが0の場所をを色をつける
{
DrawBox( j * MAP_SIZE , i * MAP_SIZE ,
j * MAP_SIZE + MAP_SIZE , i * MAP_SIZE + MAP_SIZE ,
GetColor( 255 , 0 , 0 ) , TRUE ) ;//マップチップの色
}
}
}
}
#include "Main.h"//ヘッダーの読み込み
void MyMove(){
int phot=4;
DrawGraph(Myx,Myy,MyGHandle[phot],true);
if(CheckHitKey(KEY_INPUT_RIGHT) ){
Myx +=2;
}
if(CheckHitKey(KEY_INPUT_LEFT)){
Myx -=2;
}
}void MyMove();
void Map();
extern int phot,MyGHandle[],Myx,Myy;//Main.cppの変数extern
extern int i,j;//Map.cppのint変数extern
extern bool RIGHTHit;//Map.cppのbool変数extern[/ヘッダー]