Ritornare un oggetto in metodo

di il
1 risposte

Ritornare un oggetto in metodo

Buongiorno (prima volta sul forum)

Premessa:
Sto lavorando ad un progetto per l'università, nel quale voglio creare un simil Scacchi.
Nel progetto ho una classe Token (con un immagine del pezzo, le sue statistiche, ed delle coordinate). E volevo creare un metodo per capire se sto cliccando su un Token con il mouse. Quindi creo un metodo WhoMoves (a cui passo la posizione del mouse) che chiama un altro metodo ThereIsATokenThere che controlla se con il mouse sto cliccando uno dei vari token (al momento 2). Ma poi non so come restituire il valore, idee? (quelle che ho provato non hanno funzionato ahah)

Questo è il file .h (ho eliminato delle parti che non vi dovrebbero servire)
#ifndef MAIN_CPP_TURNSYSTEM_H
#define MAIN_CPP_TURNSYSTEM_H

#include "Librerie.h"
#include "Token.h"

class TurnSystem{
private:

    //TOKEN
    Token* soldier;
    Token* demon;

    void InizializedToken();

public:
    //COSTRUTTORE
    TurnSystem();
    //DISTRUTTORE
    virtual ~TurnSystem();
    //Aggiorna clase
    void Update(sf::Vector2i& mousePos);
    //FASI
    void WhoMoves(sf::Vector2i &pos);
    //Controllo pedine
    Token ThereIsATokenThere(sf::Vector2i &mousePos);
};

#endif //MAIN_CPP_TURNSYSTEM_H
Qua è dove inizializzo i Token
void TurnSystem::InizializedToken() {
    sf::Image image;
    image.loadFromFile("C:/Users/franc/Desktop/Reisende/Sprites/Soldier.png");
    this->soldier= new Token(image,10,10,5,1,1);
    image.loadFromFile("C:/Users/franc/Desktop/Reisende/Sprites/Dimon.png");
    this->demon= new Token(image,6,6,6,3,3);
    }
void TurnSystem::WhoMoves(sf::Vector2i &pos) {
    if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {//se clicco il mouse
        Token* A;
        *A=this->ThereIsATokenThere(pos);
        if(pedinaSelezionata!=nullptr){
            std::cout<<"La pedina selezionata ha "<<A->GetHp()<<" punti vita";
            phase = PHASE::positionSelection;
        }
    }
}
Token TurnSystem::ThereIsATokenThere(sf::Vector2i &mousePos) {
    //controlla se si è selezionata una pedina
    if(soldier->GetPosX()==mousePos.x && soldier->GetPosY()==mousePos.y)
         return *soldier;
    else if(demon->GetPosX()==mousePos.x && demon->GetPosY()==mousePos.y)
        return *demon;
}
Ed infine questo è Update, il metodo che dovrebbe chiamare WhoMoves
void TurnSystem::Update(sf::Vector2i &mousePos) {
    //fase di selezione del pedone
    this->WhoMoves(mousePos);
}
Non so come fare. Ho provato a creare un puntatore nel file .h, da riempire poi in ThereIsATokenThere, ma non funsiona. Ho provato a far tornare sia a ThereIsATokenThere sia a WhoMoves un puntatore, ma non funziona. Questa è una via di mezzo


Non ricevo dei veri e propri errori, ma mentre compilo viene:
====================[ Build | Reisende | Debug ]================================
"C:\Program Files\JetBrains\CLion 2021.3.3\bin\cmake\win\bin\cmake.exe" --build C:\Users\franc\Desktop\Reisende\cmake-build-debug --target Reisende
[1/2] Building CXX object CMakeFiles/Reisende.dir/TurnSystem.cpp.obj
C:/Users/franc/Desktop/Reisende/TurnSystem.cpp: In member function 'Token TurnSystem::ThereIsATokenThere(sf::Vector2i&)':
C:/Users/franc/Desktop/Reisende/TurnSystem.cpp:87:1: warning: control reaches end of non-void function [-Wreturn-type]
87 | }
| ^
C:/Users/franc/Desktop/Reisende/TurnSystem.cpp: In member function 'sf::Vector2i TurnSystem::MouseOnTheBoard(sf::Vector2i&)':
C:/Users/franc/Desktop/Reisende/TurnSystem.cpp:105:1: warning: control reaches end of non-void function [-Wreturn-type]
105 | }
| ^
[2/2] Linking CXX executable Reisende.exe

Build finished



E poco dopo che il programma parte, si chiude la finestra e appare
Failed to create texture, its internal size is too high (3340759696x41, maximum is 16384x16384)
Failed to copy texture, failed to create new texture
i numeri sono casuali e vengono sempre diversi


Se avete idee ve ne sarei molto grato, grazie in anticipo

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte