Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

pepe1995

Frischling

  • »pepe1995« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Warngau

Beruf: Schüler (10.)

  • Private Nachricht senden

1

20.01.2011, 18:42

sfml selbsterstellte klasse

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "Windows.h"
#include "Singleton.hpp"
#include "SFML/System.hpp"
#include "SFML/Graphics.hpp"
#include "SFML/Window.hpp"
#include "SFML/Audio.hpp"

#define g_pGameInst CGame::Get()

class CGame : public TSingleton
{
public:
CGame();
~CGame();
void RunMessageLoop(void Render(float fTime), void Move(float fTime));
void InitGame();
void ExitGame();
void Clear(sf::Color ColBackground = sf::Color(255, 255, 255));
void Flip();
void Update();
void Draw(sf::Sprite Sprite);

sf::Sprite* GetSpriteReticle() {return m_ReticleSprite; }
sf::Sprite* GetSpriteAim () {return m_AimSprite; }
sf::RenderWindow GetApply (){return m_App; }
sf::Input GetInput () {return m_App.GetInput();}

float GetTime() {return m_fTime; } 
void SetTime(float fTime) {m_fTime = fTime;}

private:
float m_fTime;

sf::RenderWindow& m_App;

sf::Music m_Music;
sf::Clock m_Clock;

sf::Image& m_ReticleImage;
sf::Image& m_AimImage;
sf:Sprite* m_ReticleSprite;
sf:Sprite* m_AimSprite;

};




int IntRandom(float RandomRange)
{
return (rand() % (UINT)(RandomRange) ) + 1;
}
www.4story.de
ROCKT! ;)

2

20.01.2011, 18:45

Jetzt stellt sich die Frage, was du uns damit mitteilen willst :D
Freund: "Ein Leben ohne Kaffee ist unmöglich, aber sinnlos!"
"Wer Angst vor der Dunkelheit hat, hat noch nie gesehen, was das Licht anrichten kann!"

pepe1995

Frischling

  • »pepe1995« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Warngau

Beruf: Schüler (10.)

  • Private Nachricht senden

3

20.01.2011, 18:48

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "Game.hpp"

CGame::CGame() : m_App(sf::RenderWindow(sf::VideoMode(1366, 768), "Moorhuhn")) , 
 m_Clock(sf::Clock()) ,
 m_ReticleImage(sf::Image()),
 m_AimImage(sf::Image())


{
InitGame();
}

CGame::~CGame()
{
ExitGame();
}

void CGame::InitGame()
{
m_Clock = sf::Clock();
m_App = sf::RenderWindow(sf::VideoMode(1366, 768), "Moorhuhn");

srand( (UINT)(m_Clock.GetElapsedTime()));

m_Music.OpenFromFile("12Inch.ogg");
m_Music.Play();

m_ReticleImage = sf::Image();
m_ReticleImage.LoadFromFile("Fadenkreuz.bmp");
m_ReticleImage.CreateMaskFromColor(sf::Color(255, 255, 255));

m_ReticleSprite = new sf::Sprite(m_ReticleImage);
m_ReticleSprite->SetImage(m_ReticleImage);
m_ReticleSprite->SetPosition( (m_App.GetWidth()/2) - (m_ReticleSprite->GetSize().x/2),
 m_App.GetHeight()/2 - m_ReticleSprite->GetSize().y/2 );

m_AimImage = sf::Image();
m_AimImage.LoadFromFile("Moor2.bmp");
m_AimImage.CreateMaskFromColor(sf::Color(0, 0, 0));

m_AimSprite = new sf::Sprite(m_AimImage);
m_AimSprite->SetImage(m_AimImage);
m_AimSprite->SetPosition(IntRandom(m_App.GetWidth()) - m_AimSprite->GetSize().x , IntRandom(m_App.GetHeight()) - m_AimSprite->GetSize().y);

m_App.ShowMouseCursor(false);

}

void CGame::ExitGame()
{
if (!m_ReticleSprite)
{
delete m_ReticleSprite;
m_ReticleSprite = NULL;
}

if (!m_AimSprite)
{
delete m_AimSprite;
m_AimSprite = NULL;
}
}

void CGame::RunMessageLoop(void Render(float fTime), void Move(float fTime))
{
// Vergangene Zeit berechnen
float fElapsedTime = m_Clock.GetElapsedTime();

// Solange das Fenster offen ist...
while (m_App.IsOpened())
{
// Ein Event...
sf::Event Event;
// ...füllen
while (m_App.GetEvent(Event))
{
// Wenn das Fenster geschlossen werden soll schließen
if (Event.Type == Event.Closed)
m_App.Close();
}

// Rendern und bewegen
Render(fElapsedTime);
Move(fElapsedTime);

//Framedauer berechnen
fElapsedTime = m_Clock.GetElapsedTime();
this->Update();
}
}

void CGame::Clear(sf::Color ColBackground)
{
m_App.Clear(ColBackground);
}

void CGame::Flip()
{
m_App.Display();
}

void CGame::Update()
{
m_fTime += m_Clock.GetElapsedTime();
m_Clock.Reset();
}

void CGame::Draw(sf::Sprite Sprite)
{
m_App.Draw(Sprite);
}


Beim Kopieren gibts

Quellcode

1
1>------ Erstellen gestartet: Projekt: SFML__, Konfiguration: Release Win32 ------1>  Game.cpp1>C:\Users\Stephan\Desktop\Programm!eren\SFML\SFML-1.6\include\SFML/Window/Input.hpp(135): error C2248: "sf::NonCopyable::NonCopyable": Kein Zugriff auf private Member, dessen Deklaration in der sf::NonCopyable-Klasse erfolgte.1>          C:\Users\Stephan\Desktop\Programm!eren\SFML\SFML-1.6\include\SFML/System/NonCopyable.hpp(57): Siehe Deklaration von 'sf::NonCopyable::NonCopyable'1>          C:\Users\Stephan\Desktop\Programm!eren\SFML\SFML-1.6\include\SFML/System/NonCopyable.hpp(41): Siehe Deklaration von 'sf::NonCopyable'1>          Diese Diagnose trat in der vom Compiler generierten Funktion "sf::Input::Input(const sf::Input &)" auf.1>Game.cpp(9): warning C4413: "CGame::m_App": Der Verweismember wird mit einem temporären Wert initialisiert, der nach dem Beenden des Konstruktors nicht beibehalten wird.1>          c:\users\stephan\desktop\programm!eren\sfml\sfml__\Game.hpp(34): Siehe Deklaration von 'CGame::m_App'1>Game.cpp(9): warning C4413: "CGame::m_ReticleImage": Der Verweismember wird mit einem temporären Wert initialisiert, der nach dem Beenden des Konstruktors nicht beibehalten wird.1>          c:\users\stephan\desktop\programm!eren\sfml\sfml__\Game.hpp(39): Siehe Deklaration von 'CGame::m_ReticleImage'1>Game.cpp(9): warning C4413: "CGame::m_AimImage": Der Verweismember wird mit einem temporären Wert initialisiert, der nach dem Beenden des Konstruktors nicht beibehalten wird.1>          c:\users\stephan\desktop\programm!eren\sfml\sfml__\Game.hpp(40): Siehe Deklaration von 'CGame::m_AimImage'1>Game.cpp(43): warning C4244: 'Argument': Konvertierung von 'unsigned int' in 'float', möglicher Datenverlust1>Game.cpp(43): warning C4244: 'Argument': Konvertierung von 'unsigned int' in 'float', möglicher Datenverlust1>  main.cpp1>C:\Users\Stephan\Desktop\Programm!eren\SFML\SFML-1.6\include\SFML/Window/Input.hpp(135): error C2248: "sf::NonCopyable::NonCopyable": Kein Zugriff auf private Member, dessen Deklaration in der sf::NonCopyable-Klasse erfolgte.1>          C:\Users\Stephan\Desktop\Programm!eren\SFML\SFML-1.6\include\SFML/System/NonCopyable.hpp(57): Siehe Deklaration von 'sf::NonCopyable::NonCopyable'1>          C:\Users\Stephan\Desktop\Programm!eren\SFML\SFML-1.6\include\SFML/System/NonCopyable.hpp(41): Siehe Deklaration von 'sf::NonCopyable'1>          Diese Diagnose trat in der vom Compiler generierten Funktion "sf::Input::Input(const sf::Input &)" auf.1>main.cpp(19): warning C4244: 'Argument': Konvertierung von 'UINT' in 'float', möglicher Datenverlust1>main.cpp(19): warning C4244: 'Argument': Konvertierung von 'UINT' in 'float', möglicher Datenverlust1>main.cpp(28): warning C4244: 'Argument': Konvertierung von 'unsigned int' in 'float', möglicher Datenverlust1>main.cpp(28): warning C4244: 'Argument': Konvertierung von 'int' in 'float', möglicher Datenverlust========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



wüsste gerne meinen fehler
und wenn irgendjemand erfahrener will kann mir verbesserungsvorschläge geben
würd mich freuen
pepe
www.4story.de
ROCKT! ;)

pepe1995

Frischling

  • »pepe1995« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Warngau

Beruf: Schüler (10.)

  • Private Nachricht senden

4

20.01.2011, 18:51

Verwende die singleton klasse aus dem kalista buch

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include "SFML/Graphics.hpp"#include "Game.hpp"

void Render(float fNumSecsPassed){ g_pGameInst->Draw(*(g_pGameInst->GetSpriteReticle()));g_pGameInst->Draw(*(g_pGameInst->GetSpriteAim    ()));g_pGameInst->Flip();}

void Move(float fNumSecsPassed){UINT g_ui_Mouse_X = g_pGameInst->GetInput().GetMouseX();UINT g_ui_Mouse_Y = g_pGameInst->GetInput().GetMouseY();g_pGameInst->GetSpriteReticle()->SetPosition(g_ui_Mouse_X, g_ui_Mouse_Y);if (g_pGameInst->GetTime() > 3.0f){if(g_pGameInst->GetSpriteAim()->GetPosition().y > g_pGameInst->GetApply().GetHeight()/2){g_pGameInst->GetSpriteAim()->Move(sf::Vector2(0, -(6.0f - g_pGameInst->GetTime())*10));if(g_pGameInst->GetTime() > 6.0f){g_pGameInst->SetTime(g_pGameInst->GetTime() - 6.0f);g_pGameInst->GetSpriteAim()->SetPosition(IntRandom(1366.0f) , g_pGameInst->GetApply().GetHeight());}}g_pGameInst->SetTime(g_pGameInst->GetTime() + fNumSecsPassed);
}


int main (){g_pGameInst->RunMessageLoop(Render, Move);return 0;}
www.4story.de
ROCKT! ;)

5

20.01.2011, 19:14

kannst du die Build ereignisse bitte untereinander posten? So kann man kaum die Fehler entziffern.
Metal ist keine Musik sondern eine Religion.

pepe1995

Frischling

  • »pepe1995« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Warngau

Beruf: Schüler (10.)

  • Private Nachricht senden

6

20.01.2011, 19:16

sry habs versucht aber immer wenn ich auch mit leerzeichen poste wirds zusammengerückt
www.4story.de
ROCKT! ;)

7

20.01.2011, 19:17

Du kopierst im Konstruktor eine Variable, die nicht Kopierbar ist.

C-/C++-Quelltext

1
m_App(sf::RenderWindow(sf::VideoMode(1366, 768), "Moorhuhn"))

Das geht nicht, weil dabei eine neue Instanz von RenderWindow temporär angelegt wird und versucht wird sie dannach zu kopieren.

Wenn du das so machen willst, dann solltest du einen Pointer benutzen in der Klasse und ein new benutzen.
Sollte dann aber wieder im Destruktor gelöscht werden.

Alternativ:
Das oben genannte aus der Init liste raus und im Konstruktor

C-/C++-Quelltext

1
this->m_App.Create(sf::VideoMode(1366, 768), "Moorhuhn");

aufrufen. (Warning: Der Code hierrüber ist nicht getestet. Die funktion sollte so heißen, muss aber nicht.)
Freund: "Ein Leben ohne Kaffee ist unmöglich, aber sinnlos!"
"Wer Angst vor der Dunkelheit hat, hat noch nie gesehen, was das Licht anrichten kann!"

pepe1995

Frischling

  • »pepe1995« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Warngau

Beruf: Schüler (10.)

  • Private Nachricht senden

8

20.01.2011, 19:22

bleibt doch

Quellcode

1
1>Game.cpp(9): error C2758: 'CGame::m_App': muss in der Basisklassen/Element-Initialisierungsliste des Konstruktors initialisiert werden1>          c:\users\stephan\desktop\programm!eren\sfml\sfml__\Game.hpp(34): Siehe Deklaration von 'CGame::m_App'

kommt dazu
www.4story.de
ROCKT! ;)

9

20.01.2011, 19:33

Dann mach es doch, wie ich es dir gesagt hab.
Mach aus

C-/C++-Quelltext

1
sf::RenderWindow m_App;

ein

C-/C++-Quelltext

1
sf::RenderWindow *m_App;


und beim Konstruktor machst du das dann so:

C-/C++-Quelltext

1
2
3
4
5
6
7
CGame::CGame() : m_App(new sf::RenderWindow(sf::VideoMode(1366, 768), "Moorhuhn")) , 
 m_Clock(sf::Clock()) ,
 m_ReticleImage(sf::Image()),
 m_AimImage(sf::Image())
{
InitGame();
}
Freund: "Ein Leben ohne Kaffee ist unmöglich, aber sinnlos!"
"Wer Angst vor der Dunkelheit hat, hat noch nie gesehen, was das Licht anrichten kann!"

pepe1995

Frischling

  • »pepe1995« ist der Autor dieses Themas

Beiträge: 60

Wohnort: Warngau

Beruf: Schüler (10.)

  • Private Nachricht senden

10

20.01.2011, 19:35

gut hab jetzt alle member als zeiger deklariert und es sind alle meldungen weg bis auf das mit non copyable
www.4story.de
ROCKT! ;)

Werbeanzeige