无敌框架并承受伤害等级

时间:2018-09-28 17:28:30

标签: c++ sfml

我是一个初学者,我已经读过文档,但是我需要练习以学习,现在我被困住了。

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

所以我尝试了这个(请参见下面的代码)

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

主要:

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

takeDommage.h:

#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

takeDommage.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:\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)) ===|

1 个答案:

答案 0 :(得分:1)

您似乎在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.