Anfängerfragen Klassendesign & SFML
Verfasst: 15.03.2012, 22:33
Hallo zusammen :)
Nach langer Zeit hab ich mal wieder Visual C++ installiert und versuche langsam aber sicher wieder reinzukommen. Derzeit schau ich mir die SFML ein wenig an und dabei tun sich mir zwei Fragen auf:
1. Designfragen
Ich möchte gerade ganz einfach ein Sprite über den Bildschirm bewegen. So weit klappt das auch. Nun möchte ich eine Klasse "CGameObject" erstellen, die Spielobjekte repräsentiert. Also ein Spielobjekt ist nachher zB. der Spieler, ein Gegner, ein PowerUp...
Meine Klassendefinition sieht wie folgt aus:
Dadurch dass meine Klasse ein Sprite enthält habe ich jetzt das Problem, dass ich Getter und Setter benötige um Objekt und damit dem Sprite Position, Größe etc. zuweisen kann. In diesen Settern werden einfach die entsprechenden Methoden von sf::Sprite aufgerufen, zB.
oder
Irgendwie kommt mir das nicht wirklich geschickt vor, da ich ja nun ständig Sachen extra aufrufen muss, die sf::Sprite schon bietet.
Trotzdem möchte ich so eine Klasse haben, schließlich sollen die Objekte auch mal noch Leben, Waffen oä bekommen, das heißt ich benötige eine Klasse, die das bewerkstelligt.
Die Frage ist nun: Mach ich das richtig? Soll ich völlig anders vorgehen? Für Tips wäre ich dankbar.
Am allerwenigsten gefällt mir das Zeichen meines Objekts, das wie folgt bewerkstelligt wird:
Und dann wird in der main wie folgt gezeichnet:
Also für Tips zum Klassendesign etc. wäre ich sehr dankbar.
2. Fiepen
Dann hab ich noch ein technisches Problem. Mit obiger Klasse habe ich ein Objekt erstellt, ein Bild reingeladen und dies dann (im Fenstermodus) zeichnen lassen. Sobald das Programm startet, fiept mein Rechner, was nervt. Maximiere ich das Fenster wird das Fiepen leiser, weg ist es allerdings nicht. Weiß jemand woran das liegen könnte?
Vielen Dank erst mal, fürs bis hier her durchlesen.
Lg, nerem
Nach langer Zeit hab ich mal wieder Visual C++ installiert und versuche langsam aber sicher wieder reinzukommen. Derzeit schau ich mir die SFML ein wenig an und dabei tun sich mir zwei Fragen auf:
1. Designfragen
Ich möchte gerade ganz einfach ein Sprite über den Bildschirm bewegen. So weit klappt das auch. Nun möchte ich eine Klasse "CGameObject" erstellen, die Spielobjekte repräsentiert. Also ein Spielobjekt ist nachher zB. der Spieler, ein Gegner, ein PowerUp...
Meine Klassendefinition sieht wie folgt aus:
Code: Alles auswählen
class CGameObject
{
public:
// Konstruktoren / Destruktor
CGameObject();
CGameObject(sf::Vector2f pos, sf::Image im);
CGameObject(float x, float y, sf::Image im);
~CGameObject();
// Getter / Setter
void SetImage(sf::Image& im); // Grafik
sf::Sprite GetSprite(void);
void SetType(int type); // Objektidentifikation
int GetType(void);
void SetPosition(sf::Vector2f pos); // Position
void SetPosition(float x, float y);
sf::Vector2f GetPosition(void);
void SetCenterPosition(sf::Vector2f pos);
sf::Vector2f GetCenterPosition(void);
void SetSize(int width, int height); // Größe
void SetScale(float scale_x, float scale_y);
float GetWidth(void);
float GetHeight(void);
sf::Vector2f GetScale(void);
void SetMovement(sf::Vector2f mov); // Bewegungsrichtung
void SetMovement(sf::Vector2f mov, bool jumping); // Bewegung mit Angabe des Sprungzustandes
void SetMovement(float mov_x, float mov_y, bool jumping);
void SetMovement(float mov_x, float mov_y);
void SetJump(float jump); // Sprunggeschwindigkeit
float GetJump(void);
// Objekt befindet sich in der Luft
bool IsJumping(void);
// Springen
void Jump(void);
// Bewegen
void Move(void);
void Move(DIRECTION dir);
protected:
sf::Vector2f m_vMovement; // Bewegungsrichtung
int m_iType; // Objekttyp
bool m_bJumping; // Sprungzustand
float m_fJump; // Sprungkraft
sf::Sprite m_sSprite; // Sprite
};
Code: Alles auswählen
void CGameObject::SetPosition(sf::Vector2f pos)
{
m_sSprite.SetPosition(pos);
}
Code: Alles auswählen
sf::Vector2f CGameObject::GetPosition(void)
{
return m_sSprite.GetPosition();
}
Trotzdem möchte ich so eine Klasse haben, schließlich sollen die Objekte auch mal noch Leben, Waffen oä bekommen, das heißt ich benötige eine Klasse, die das bewerkstelligt.
Die Frage ist nun: Mach ich das richtig? Soll ich völlig anders vorgehen? Für Tips wäre ich dankbar.
Am allerwenigsten gefällt mir das Zeichen meines Objekts, das wie folgt bewerkstelligt wird:
Code: Alles auswählen
sf::Sprite CGameObject::GetSprite(void)
{
return m_sSprite;
}
Code: Alles auswählen
App.Draw(Player.GetSprite());
2. Fiepen
Dann hab ich noch ein technisches Problem. Mit obiger Klasse habe ich ein Objekt erstellt, ein Bild reingeladen und dies dann (im Fenstermodus) zeichnen lassen. Sobald das Programm startet, fiept mein Rechner, was nervt. Maximiere ich das Fenster wird das Fiepen leiser, weg ist es allerdings nicht. Weiß jemand woran das liegen könnte?
Vielen Dank erst mal, fürs bis hier her durchlesen.
Lg, nerem