C++ 战无不胜框架,并接受伤害等级
我是一个初学者,我已经读过一篇博士论文,但我需要通过练习来学习,现在我被卡住了 所以我想做一个类takeDommage来应用一些dmg,并激活一个倒计时来创建无敌框架 所以我尝试了这个(参见下面的代码) 这是我自己创建的第一个类,所以我不知道出了什么问题 主要内容:C++ 战无不胜框架,并接受伤害等级,c++,sfml,C++,Sfml,我是一个初学者,我已经读过一篇博士论文,但我需要通过练习来学习,现在我被卡住了 所以我想做一个类takeDommage来应用一些dmg,并激活一个倒计时来创建无敌框架 所以我尝试了这个(参见下面的代码) 这是我自己创建的第一个类,所以我不知道出了什么问题 主要内容: if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis)) { std::cout<<"collision pp"<<std::endl;
if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis))
{
std::cout<<"collision pp"<<std::endl;
takeDommage::prendreDegat(10);
std::cout<<pv<<std::endl;
}
在C++中你似乎很新。编译器已经告诉你它有什么问题了。
错误:无法在没有对象的情况下调用成员函数“int takedomage::prendreDegat(int)”
你需要先实例化(创建)你的对象。您访问takeDommage函数的方式就像takeDommage函数是一个静态函数,而不是。它的公共功能是takeDamage的一个成员函数
假设您在if语句调用之前的某个地方实例化了takeDommage类
TakeDommage Obj;
...
...
if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis))
{
std::cout<<"collision pp"<<std::endl;
Obj.prendreDegat(10); //calling the prendredegat member function of Obj
std::cout<<pv<<std::endl;
}
takedomage::prendreDegat
是一种实例方法。正如错误消息所说,您需要一个对象来调用它,即,takeDommage td=。。。;td.prendreDegat(10)
您当前试图调用它,好像它是静态的
。好的,我正在尝试,但idk如何做^^“if语句放在哪里?if(collision…)在游戏循环的主循环中,if(takeDommage…)在takeDommage中。现在我有一个“error:'pv'未在此范围内声明”"但是我已经在缅因州声明了pv,如果不查看所有内容,我就不知道为什么。我非常确定pv不在if语句所在的可访问范围内。if语句是否在缅因州?最好编辑您的问题并添加缺少的部分codes@Jules变量受定义它们的范围的约束。变量在main
中,仅在main
中可见。在main
中的for
循环中定义的变量仅在该for
循环中可见。我建议不要编辑该问题以添加另一个问题。该问题切中要害,具体且回答正确。添加更多问题会拓宽问题的范围如果一个答案产生了新的问题,那么就提出新的问题。@Jules,正如user4581301提到的,如果没有帮助,最好再问另一个问题。从编辑中,我可以告诉你,全局pv
变量无法访问的原因是我t超出范围。pv-=Dommage;导致问题。
。快速修复方法是将pv作为另一个参数传递给prendreDegat。如果这样做,请确保也更改当前的prendreDegat声明。例如;void takeDommage::prendreDegat(int-Dommage,int-pv)
#include "takeDommage.h"
takeDommage::takeDommage()
{
}
void takeDommage::prendreDegat(int Dommage)
{
if(takeDammageClock.getElapsedTime().asSeconds()>=3)
{
std::cout << "bite" << std::endl;
pv -= Dommage;
takeDammageClock.restart();
}
}
||=== Build: Debug in TheGameSFML (compiler: GNU GCC Compiler) ===|
E:\Work\Top_secret\code\TheGame\main.cpp||In function 'int main()':|
E:\Work\Top_secret\code\TheGame\main.cpp|168|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
E:\Work\Top_secret\code\TheGame\main.cpp|180|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
E:\Work\Top_secret\code\TheGame\main.cpp|217|error: cannot call member function 'int takeDommage::prendreDegat(int)' without object|
E:\Work\Top_secret\code\TheGame\main.cpp|156|warning: unused variable 'enemySpawnTimer' [-Wunused-variable]|
E:\Work\Top_secret\code\TheGame\src\takeDommage.cpp|8|error: prototype for 'void takeDommage::prendreDegat(int)' does not match any in class 'takeDommage'|
include\takeDommage.h|15|error: candidate is: int takeDommage::prendreDegat(int)|
||=== Build failed: 3 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|
TakeDommage Obj;
...
...
if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis))
{
std::cout<<"collision pp"<<std::endl;
Obj.prendreDegat(10); //calling the prendredegat member function of Obj
std::cout<<pv<<std::endl;
}
class takeDommage
{
public:
takeDommage();
//prendreDegat(int Dommage); //missing void
void prendreDegat(int Dommage); //correct way. which can be translated as Prendredegat returns nothing.