我正在研究一个简单的街机风格太空射击游戏,我的CREATE TABLE Animal
(
AnimalId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-- Common Animal fields here
);
CREATE TABLE Shark
(
AnimalId INT NOT NULL PRIMARY KEY,
-- Subclass specific columns
NumberFins INT,
FOREIGN KEY(AnimalId) REFERENCES Animal(AnimalId)
);
CREATE TABLE Ewok
(
AnimalId INT NOT NULL PRIMARY KEY,
-- Subclass specific columns
Fleas BOOL,
FOREIGN KEY(AnimalId) REFERENCES Animal(AnimalId)
);
课程出现了一些问题。
这是代码:
player
当然,所有内容都从代码底部的#include<iostream>
class player {
public:
int xPos, yPos;
void setPlayerPos(int x, int y);
int getX();
int getY();
};
void player::setPlayerPos(int x, int y) {
xPos = x;
yPos = y;
return;
}
int player::getX() {
return xPos;
}
int player::getY() {
return yPos;
}
void onGameStart() {
player Player;
Player.setPlayerPos(3,10);
}
void main() {
onGameStart();
while (gameIsRunning) {
onGameDraw();
}
}
开始。它运行一个简单的main()
函数,用于设置玩家的起始坐标。
这是事情。在初始化这些变量时设置onGameStart()
和xPos
的值时,yPos
和Player.getX()
将始终返回正确的值。但是,使用Player.getY()
设置时,Player.setPlayerPos(x,y)
和Player.getX()
会返回垃圾邮件。 (或者原始初始化值,如果设置的话)。
我想知道我做错了什么,为什么Player.getY()
没有更新Player.setPlayerPos(x,y)
和xPos
。
答案 0 :(得分:1)
您的代码似乎不完整...
这段代码似乎无法使用:
void onGameStart() {
player Player;
Player.setPlayerPos(3,10);
}
因为你正在改变局部变量 - 那些玩家在功能范围之外被销毁。您在代码中使用的播放器可能是其他实例 - 因此它的x和y不是函数中设置的,而是一些垃圾x和y值 - 因为您没有在构造函数中初始化它们。
如果你声明那些玩家玩家全球(这不是一个好习惯)那么你的代码应该工作(但全局变量总是坏主意)。也许尝试通过指针或引用将这些播放器传递给onGameStart函数
答案 1 :(得分:1)
尝试使用main中的变量:
onGameStart
答案 2 :(得分:1)
在函数POST
中,您正在创建一个局部变量播放器并设置其位置,但在函数结束后您无法再访问它,因此它是无用的。也许你想拥有一个全局变量玩家并在游戏开始时设定其位置?我怀疑你混淆了局部变量和另一个你没有从这个函数修改的变量,你没有得到你想要的结果。
答案 3 :(得分:1)
以下对象:player Player;
本地指向您的独立void onGameStart()
功能。一旦该函数超出范围,对象就会被破坏。您的其他对象的数据成员保持未初始化,因此垃圾值。您的本地对象与程序中的其他(主?)对象无关:
int main() {
player p;
onGameStart(); // only modifies its internal object, not the p
std::cout << p.getX(); // prints garbage because xPos is uninitialized
std::cout << p.getY(); // prints garbage because yPos is uninitialized
}
如果您希望onGameStart()
函数能够修改对象,则一种方法是通过引用传递对象:
void onGameStart(player& p) {
p.setPlayerPos(3, 10);
}
现在这段代码打印3和10:
int main() {
player p;
onGameStart(p); // now modifies the p
std::cout << p.getX(); // prints 3
std::cout << p.getY(); // prints 10
}
也许这就是混乱。在构造函数中初始化数据成员:
class player {
public:
int xPos, yPos;
player() : xPos(0), yPos(0) {}
};