我遇到下面的代码有问题。除了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