无法弄清楚我自己的代码
Can't figure out my own code
我很难弄清楚为什么我的代码无法正常工作。我没有其他人可以寻求帮助,所以我希望这里有人可以帮助我。
我正在用 C++ 开发一款游戏,可以这么说,我需要切掉我的基础。这是我现在的代码:
这是我的 main.cpp:
if(en1.getBottom() > jello1.getGroundHeight())
{
jello1.setHealth(jello1.getHealth() - 25);
jello1.setGroundHeight((int)screen1.getScreenDimensions().y (int)jello1.getSize().y);
}
if(jello1.getHealth() == 75)
{
jello1.update1(jello1, lane1, screen1);
}
这是我的 header 果冻 class:
#ifndef JELLO_H
#define JELLO_H
#include"ScreenDimensions.h"
#include"Lane.h"
class Jello
{
public:
sf::RectangleShape ground;
void update1(Jello jello, Lane lane, ScreenDimensions screen);
private:
sf::Vector2f mPositionJello;
sf::Vector2f mSizeJello;
sf::Color mColorJello;
int mGroundHeight;
int mHealth;
};
#endif // JELLO_H
这是我的 Jello.cpp 文件:
#include"Jello.h"
void Jello::update1(Jello jello, Lane lane, ScreenDimensions screen)
{
jello.ground.setSize(sf::Vector2f((float)screen.getScreenDimensions().x / 8, 15.0f));
jello.ground.setPosition(sf::Vector2f((float)lane.getLanePositionX(), (float)screen.getScreenDimensions().y - 10.0f));
}
我似乎无法找到为什么我的 update1
功能不起作用。我用另一种方式编写了我的代码,这种方式只在我的 main.cpp 中,但它有很多重复代码,我希望它看起来更干净。
我试图缩减我的代码以使这个 post 更短,但如果不清楚,我可以 post 我的所有代码来提供帮助。
提前感谢任何花时间阅读本文并尝试帮助我的人。
你的问题很含糊,但一眼就能看出来:你正试图修改你的变量 "jello, lane" 等。你应该通过引用传递它们:
void update1(Jello &jello, Lane &lane, ScreenDimensions &screen);
(或使用指针)。关于 passing by reference
的更多信息
您正在按值传入 jello
,这意味着您正在创建对象的副本并更新它,而不是更新您传入的对象。
要解决这个问题,只需通过引用传递它:
void Jello::update1(Jello &jello, const Lane &lane, const ScreenDimensions &screen)
// ^ here
您应该通过const-reference 传递其他两个对象以避免不必要的复制。请注意,这仅在您对这些对象调用的函数被声明为 const
时才有效,它们可能应该如此。
我很难弄清楚为什么我的代码无法正常工作。我没有其他人可以寻求帮助,所以我希望这里有人可以帮助我。
我正在用 C++ 开发一款游戏,可以这么说,我需要切掉我的基础。这是我现在的代码:
这是我的 main.cpp:
if(en1.getBottom() > jello1.getGroundHeight())
{
jello1.setHealth(jello1.getHealth() - 25);
jello1.setGroundHeight((int)screen1.getScreenDimensions().y (int)jello1.getSize().y);
}
if(jello1.getHealth() == 75)
{
jello1.update1(jello1, lane1, screen1);
}
这是我的 header 果冻 class:
#ifndef JELLO_H
#define JELLO_H
#include"ScreenDimensions.h"
#include"Lane.h"
class Jello
{
public:
sf::RectangleShape ground;
void update1(Jello jello, Lane lane, ScreenDimensions screen);
private:
sf::Vector2f mPositionJello;
sf::Vector2f mSizeJello;
sf::Color mColorJello;
int mGroundHeight;
int mHealth;
};
#endif // JELLO_H
这是我的 Jello.cpp 文件:
#include"Jello.h"
void Jello::update1(Jello jello, Lane lane, ScreenDimensions screen)
{
jello.ground.setSize(sf::Vector2f((float)screen.getScreenDimensions().x / 8, 15.0f));
jello.ground.setPosition(sf::Vector2f((float)lane.getLanePositionX(), (float)screen.getScreenDimensions().y - 10.0f));
}
我似乎无法找到为什么我的 update1
功能不起作用。我用另一种方式编写了我的代码,这种方式只在我的 main.cpp 中,但它有很多重复代码,我希望它看起来更干净。
我试图缩减我的代码以使这个 post 更短,但如果不清楚,我可以 post 我的所有代码来提供帮助。
提前感谢任何花时间阅读本文并尝试帮助我的人。
你的问题很含糊,但一眼就能看出来:你正试图修改你的变量 "jello, lane" 等。你应该通过引用传递它们:
void update1(Jello &jello, Lane &lane, ScreenDimensions &screen);
(或使用指针)。关于 passing by reference
的更多信息您正在按值传入 jello
,这意味着您正在创建对象的副本并更新它,而不是更新您传入的对象。
要解决这个问题,只需通过引用传递它:
void Jello::update1(Jello &jello, const Lane &lane, const ScreenDimensions &screen)
// ^ here
您应该通过const-reference 传递其他两个对象以避免不必要的复制。请注意,这仅在您对这些对象调用的函数被声明为 const
时才有效,它们可能应该如此。