我遇到下面的代碼有問題。除了XCoord
和YCoord
變量外,我的一切正常。在ChangePosition
方法中,如果XCoord
不等於50,那麼我想添加25到XCoord
,然後將XCoord
重置爲0,並且如果XCoord = 50
和YCoord isnt equal to 50
將25添加到YCoord
。局部變量超出範圍......我想
什麼我已經通過調試發現是,當ChangePosition
方法返回XCoord
和YCoord
他們恢復到0
當調試繼續通過switch
聲明。我認爲它與XCoord
和YCoord
超出範圍(不是100%確定這是否是實際問題)有關,也是return XCoord, YCoord
語法合法嗎?我使用Visual Studio,並沒有說它錯了,但我不確定。
我認爲它必須是以上兩個原因之一,爲什麼變量沒有改變。 我試着用LoadLevel
方法中的2個變量初始化結構Coords coords;
,並將結構傳遞給ChangePosition
方法,但是之後我必須將變量聲明爲靜態整數,然後導致LNK2001錯誤:我認爲這有些事要做試圖用Coords::XCoord += 25
來調整變量。但我無法使用coords.XCoord
,因爲該結構沒有在ChangePosition方法中聲明,所以我得到一個關於類型名稱未被識別的錯誤(沿着這些行的東西)。
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
}
您不能在一個'return'語句中返回兩件事情。 '返回XCoord,YCoord'是有效的,但它使用逗號運算符,所以它相當於'return YCoord'。 – Barmar
即使您可以返回多個值,也不會將該函數的結果分配給任何東西。 – Barmar