マップデータの座標取得
Re: マップデータの座標取得
その「マップデータ」によるでしょう。
「プレイヤーがいまいるxy座標を表示する方法」がある「マップデータ」ならあるでしょうし、ない「マップデータ」ならないでしょう。
もしも具体的にあるかないか、およびその方法を考えてほしいのであれば、「マップデータ」の詳細を提示してください。
「プレイヤーがいまいるxy座標を表示する方法」がある「マップデータ」ならあるでしょうし、ない「マップデータ」ならないでしょう。
もしも具体的にあるかないか、およびその方法を考えてほしいのであれば、「マップデータ」の詳細を提示してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: マップデータの座標取得
失礼しました。こういったマップデータです。
// マップのデータ
int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] =
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } ,
{ 0, 1, 0, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 0, 1, 1, 0, 0, 0, 1, 0 } ,
{ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0 } ,
{ 0, 1, 0, 1, 0, 0, 0, 0, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
} ;
// マップのデータ
int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] =
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } ,
{ 0, 1, 0, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 0, 1, 1, 0, 0, 0, 1, 0 } ,
{ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0 } ,
{ 0, 1, 0, 1, 0, 0, 0, 0, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
} ;
Re: マップデータの座標取得
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
このマップデータとプレイヤーがいまいるxy座標の関係がわからないので、わかりません。
そもそも「マップデータからプレイヤーがいまいるxy座標を表示する方法」の意味がよくわからない気がするので、もう少し詳しく説明していただけますか?
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
このマップデータとプレイヤーがいまいるxy座標の関係がわからないので、わかりません。
そもそも「マップデータからプレイヤーがいまいるxy座標を表示する方法」の意味がよくわからない気がするので、もう少し詳しく説明していただけますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: マップデータの座標取得
失礼しました。
本サイトのサンプルプログラムですが、
このようなゲームにプレイヤーの現在地点の座標を常に表示されるようにしたいと思っています。
本サイトのサンプルプログラムですが、
このようなゲームにプレイヤーの現在地点の座標を常に表示されるようにしたいと思っています。
#include "DxLib.h"
#define BLOCK_SIZE 1000.0f // ブロックのサイズ
#define BLOCK_NUM_X 16 // X方向のブロック数
#define BLOCK_NUM_Z 16 // Z方向のブロック数
#define CAMERA_Y 500.0f // カメラの高さ
// マップ( 1:道 0:壁 )
char Map[ BLOCK_NUM_Z ][ BLOCK_NUM_X ] =
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,
0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,
0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,
0,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0,
0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,
0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,
0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,
0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,
0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,
0,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,
0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,
0,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
} ;
// WinMain
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int KabeModel ; // 壁モデル
int x, z ; // 位置
int movx, movz ; // 移動先の座標
int Muki ; // 向き( 0:x軸プラス方向 1:z軸マイナス方向 2:x軸マイナス方向 3:z軸プラス方向 )
int NowInput ; // 現在のフレームの入力
int BackInput ; // 一つ前のフレームの入力
int EdgeInput ; // 入力のエッジ
int FrameNo ; // フレーム番号
int i, j ; // カウンタ
VECTOR CamPos ; // カメラの座標
VECTOR CamTarg ; // カメラの注視点
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// 壁モデルの読みこみ
KabeModel = MV1LoadModel( "Kabe.mqo" ) ;
// 位置と向きと入力状態の初期化
x = 1 ;
z = 1 ;
Muki = 0 ;
NowInput = 0 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
// エスケープキーが押されるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリアする
ClearDrawScreen() ;
// 入力情報を一つ前のフレームの入力に代入する
BackInput = NowInput ;
// 現在の入力を取得する
NowInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// 現在のフレームで初めて押されたボタンを算出する
EdgeInput = NowInput & ~BackInput ;
// 上が押されたら向いている方向に移動する
if( ( EdgeInput & PAD_INPUT_UP ) != 0 )
{
// 向きによって移動方向が変わる
switch( Muki )
{
case 0 : movx = 1 ; movz = 0 ; break ; // X軸プラス方向
case 1 : movx = 0 ; movz = -1 ; break ; // Z軸マイナス方向
case 2 : movx = -1 ; movz = 0 ; break ; // X軸マイナス方向
case 3 : movx = 0 ; movz = 1 ; break ; // Z軸プラス方向
}
// 移動先のマスが道だったら移動する
if( Map[ z + movz ][ x + movx ] == 1 )
{
x += movx ;
z += movz ;
}
}
// 下が押されたら向いている方向と逆方向に移動する
if( ( EdgeInput & PAD_INPUT_DOWN ) != 0 )
{
// 向きによって移動方向が変わる
switch( Muki )
{
case 0 : movx = -1 ; movz = 0 ; break ; // X軸プラス方向
case 1 : movx = 0 ; movz = 1 ; break ; // Z軸マイナス方向
case 2 : movx = 1 ; movz = 0 ; break ; // X軸マイナス方向
case 3 : movx = 0 ; movz = -1 ; break ; // Z軸プラス方向
}
// 移動先のマスが道だったら移動する
if( Map[ z + movz ][ x + movx ] == 1 )
{
x += movx ;
z += movz ;
}
}
// 左が押されていたら向いている方向を左に90度変更する
if( ( EdgeInput & PAD_INPUT_LEFT ) != 0 )
{
if( Muki == 0 )
{
Muki = 3 ;
}
else
{
Muki -- ;
}
}
// 右が押されていたら向いている方向を右に90度変更する
if( ( EdgeInput & PAD_INPUT_RIGHT ) != 0 )
{
if( Muki == 3 )
{
Muki = 0 ;
}
else
{
Muki ++ ;
}
}
// カメラの座標をセット
CamPos = VGet( x * BLOCK_SIZE, CAMERA_Y, z * BLOCK_SIZE ) ;
// カメラの注視点をセット
switch( Muki )
{
case 0 : CamTarg = VGet( 1.0f, 0.0f, 0.0f ) ; break ; // X軸プラス方向
case 1 : CamTarg = VGet( 0.0f, 0.0f, -1.0f ) ; break ; // Z軸マイナス方向
case 2 : CamTarg = VGet( -1.0f, 0.0f, 0.0f ) ; break ; // X軸マイナス方向
case 3 : CamTarg = VGet( 0.0f, 0.0f, 1.0f ) ; break ; // Z軸プラス方向
}
CamTarg = VAdd( CamPos, CamTarg ) ;
// カメラの位置と向きをセットする
SetCameraPositionAndTarget_UpVecY( CamPos, CamTarg ) ;
// マップを描画する
for( i = 0 ; i < BLOCK_NUM_Z ; i ++ )
{
for( j = 0 ; j < BLOCK_NUM_X ; j ++ )
{
// 道ではないところは描画しない
if( Map[ i ][ j ] == 0 ) continue ;
// 壁モデルの座標を変更する
MV1SetPosition( KabeModel, VGet( j * BLOCK_SIZE, 0.0f, i * BLOCK_SIZE ) ) ;
// 4方の壁の状態で描画するフレーム番号を変更する
FrameNo = 0 ;
if( Map[ i ][ j + 1 ] == 0 ) FrameNo += 1 ;
if( Map[ i ][ j - 1 ] == 0 ) FrameNo += 2 ;
if( Map[ i + 1 ][ j ] == 0 ) FrameNo += 4 ;
if( Map[ i - 1 ][ j ] == 0 ) FrameNo += 8 ;
// 割り出した番号のフレームを描画する
MV1DrawFrame( KabeModel, FrameNo ) ;
}
}
// 裏画面の内容を表画面に反映する
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
Re: マップデータの座標取得
変数x,yがそのままプレイヤーのいる位置になってるように見えます。座標で見たかったらx*BLOCK_SIZE y*BLOCK_SIZEとしたら見えるんじゃないでしょうか