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