неуязвимость рама и класс урона - PullRequest
0 голосов
/ 28 сентября 2018

Я новичок, и я уже прочитал документ, но мне нужно потренироваться для обучения, и теперь я застрял.

Так что я хотел бы сделать класс takeDommage для применения нескольких dmg и активацииобратный отсчет для создания фрейма непобедимости.

, поэтому я попробовал это (см. код ниже)

Это первый класс, который я создаю один, поэтому я не понимаю, в чем дело

main:

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 голосов
/ 28 сентября 2018

вы, кажется, очень новый в c ++.компилятор уже говорит вам, что с ним не так.error: cannot call member function 'int takeDommage::prendreDegat(int)' without object|

вам нужно сначала создать (создать) ваш объект.то, как вы получаете доступ, как будто функция takeDommage является статической функцией, которой нет.ее общедоступная функция-член takeDamage

, предполагая, что вы создали экземпляр своего класса takeDommage где-то перед вызовом оператора if,

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.
...