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