无敌框架并受到伤害等级

invincibility frame and take damage class

本文关键字:伤害 框架      更新时间:2023-10-16

我是初学者,我已经阅读了文档,但我需要练习学习,现在我被卡住了。

所以我想做一个类拿Dommage应用一些dmg并激活倒计时以创建无敌框架。

所以我试了这个(见下面的代码(

这是我独自创建的第一堂课,所以我不明白出了什么问题

主要:

if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis))
{
std::cout<<"collision pp"<<std::endl;
takeDommage::prendreDegat(10);
std::cout<<pv<<std::endl;
}

拿多米奇 :

#ifndef TAKEDOMMAGE_H
#define TAKEDOMMAGE_H
#include <SFML/Graphics.hpp>
#include <string>
#include <iostream>
#include <cstdlib>
#include <cmath>

class takeDommage
{
public:
takeDommage();
prendreDegat(int Dommage);
//virtual ~takeDommage();
protected:
sf::Clock takeDammageClock;
int Dommage;
private:
};
#endif // TAKEDOMMAGE_H

拿多姆吉.cpp

#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:WorkTop_secretcodeTheGamemain.cpp||In function 'int main()':|
E:WorkTop_secretcodeTheGamemain.cpp|168|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
E:WorkTop_secretcodeTheGamemain.cpp|180|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
E:WorkTop_secretcodeTheGamemain.cpp|217|error: cannot call member function 'int takeDommage::prendreDegat(int)' without object|
E:WorkTop_secretcodeTheGamemain.cpp|156|warning: unused variable 'enemySpawnTimer' [-Wunused-variable]|
E:WorkTop_secretcodeTheGamesrctakeDommage.cpp|8|error: prototype for 'void takeDommage::prendreDegat(int)' does not match any in class 'takeDommage'|
includetakeDommage.h|15|error: candidate is: int takeDommage::prendreDegat(int)|
||=== Build failed: 3 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|

你似乎对 C++ 很陌生。 编译器已经告诉你它出了什么问题。error: cannot call member function 'int takeDommage::prendreDegat(int)' without object|

您需要先实例化(创建(对象。 您访问的方式好像 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;
}

除此之外,您还缺少返回类型void在函数名称prendreDegat

class takeDommage
{
public:
takeDommage();
//prendreDegat(int Dommage); //missing void
void prendreDegat(int Dommage); //correct way. which can be translated as Prendredegat returns nothing.