私は以下のコードに問題があります。私はXCoord
とYCoord
の変数を除いてすべて正常に動作しています。 ChangePosition
方法では、XCoord
に25を追加し、それが50に等しくない場合はXCoord
を0にリセットし、とYCoord isnt equal to 50
の場合はYCoord
に25を追加します。私は、デバッグを通じて見つけた何範囲外になるローカル変数...考えている
はChangePosition
方法がXCoord
とYCoord
を返したときにデバッガがswitch
声明を通じて継続したときに、彼らは0
に戻すということです。私はそれがXCoord
とYCoord
(実際の問題かどうか100%確信していない)外出することと関係があると思います。return XCoord, YCoord
の構文も合法ですか?私はVisual Studioを使用していますが、それは間違っているとは言われていませんが、わかりません。
変数が変わっていない上記の2つの理由の1つでなければならないと思います。 私はをLoadLevel
メソッドの2つの変数で初期化しようとしましたが、ChangePosition
メソッドに構造体を渡しましたが、次にLNK2001エラーの原因となる静的int型として変数を宣言する必要があります。 Coords::XCoord += 25
を使用して変数を調整しようとしました。しかし、構造体がChangePositionメソッドで宣言されていないため、coords.XCoord
を使用することができないため、識別されていない型名(これらの行に沿ったもの)に関するエラーが発生します。
void TileMap::LoadLevel(HINSTANCE hInstance)
{
LPCSTR szFileName1("..\\Assets\\TILE_01.bmp");
LPCSTR szFileName2("..\\Assets\\Tile_02.bmp");
LPCSTR szFileName3("..\\Assets\\Tile_03.bmp");
Sprite* Tile_01 = new Sprite(); /*Tile_01 is the grass sprite*/
Sprite* Tile_02 = new Sprite(); /*Tile_02 is the wall sprite*/
Sprite* Tile_03 = new Sprite(); /*Tile_03 is the end point sprite*/
int XCoord = 0;
int YCoord = 0;
const int Columns = 3;
const int Rows = 3;
char MazeMap[Rows][Columns] = {
{1,2,3},
{1,2,3},
{1,2,3}
};
for (int x = 0; x < Rows; x++)
{
for (int y = 0; y < Columns; y++)
{
switch (MazeMap[x][y])
{
case GRASS: /*TILE_01*/
Tile_01->Create(DirectDraw::GetInstance()->GetDDObject(), 25, 25, 0);
Tile_01->LoadSprite(hInstance, szFileName1, XCoord, YCoord, 25, 25);
Tile_01->Draw(DirectDraw::GetInstance()->GetBackBuffer(), XCoord, YCoord, 25, 25); //Draw Tile
ChangePosition(XCoord, YCoord); //Change position
break;
case WALL: /*TILE_02*/
Tile_02->Create(DirectDraw::GetInstance()->GetDDObject(), 25, 25, 0);
Tile_02->LoadSprite(hInstance, szFileName2, XCoord, YCoord, 25, 25);
Tile_02->Draw(DirectDraw::GetInstance()->GetBackBuffer(), XCoord, YCoord, 25, 25); //Draw Tile
ChangePosition(XCoord, YCoord); //Change position
break;
case END: /*TILE_03*/
Tile_03->Create(DirectDraw::GetInstance()->GetDDObject(), 25, 25, 0);
Tile_03->LoadSprite(hInstance, szFileName3, XCoord, YCoord, 25, 25);
Tile_03->Draw(DirectDraw::GetInstance()->GetBackBuffer(), XCoord, YCoord, 25, 25); //Draw Tile
ChangePosition (XCoord, YCoord); //Change position
break;
}
}
}
}
/*
This method changes the XCoord and YCoord to pass into the sprite draw method
so the tile is drawn in the correct position
*/
int TileMap::ChangePosition(int XCoord, int YCoord)
{
if (XCoord != 50) //if (XCoord != screenWidth) //Change position
{
XCoord += 25;
}
else if (XCoord == 50 && YCoord != 50) //else if (XCoord == screenWidth && YCoord != screenHeight)
{
XCoord = 0;
YCoord += 25;
}
return XCoord, YCoord
}
1つの 'return'ステートメントで2つのものを返すことはできません。 'return XCoord、YCoord'は有効ですが、カンマ演算子を使用しているので、' return YCoord'と同じです。 – Barmar
複数の値を返すことができたとしても、その関数の結果を何にも割り当てることは決してありません。 – Barmar