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

Iljaronaldo

Treue Seele

  • »Iljaronaldo« ist der Autor dieses Themas

Beiträge: 99

Wohnort: Hadamar

Beruf: Schüler[9.Klasse Realschule]

  • Private Nachricht senden

1

10.10.2010, 12:07

[SFML]Problem mit Zeiger

Hi,

ich habe beschlossen ein Spiel mit Hilfe von SFML zu schreiben und bin dabei auf ein Problem gestoßen.
Ich poste erstmal den Code, dann versteht ihr wahrscheinlich auch das Problem.

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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#ifndef __FRAMEWORK__
#define __FRAMEWORK__

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>

class Framework
{
public:
Framework();
~Framework();
static Framework *GetInstance();
void Run();
sf::RenderWindow *GetWindow();
void Update();
void Render();
void HandleEvents();

private:
sf::RenderWindow m_Window;
sf::Event m_Event;
float ElapsedTime;
sf::Clock *m_Clock;
static Framework *m_Instance;
};


#endif


#include "Framework.h"


Framework* Framework::m_Instance = NULL;

//Initialise Window
Framework::Framework()
{
m_Window.Create(sf::VideoMode(800, 600, 32), "Window");
m_Clock = new sf::Clock;
}

//Delete Instance
Framework::~Framework()
{
delete m_Instance;
delete m_Clock;

}


//GetInstance
Framework* Framework::GetInstance()
{
if(m_Instance == NULL)
m_Instance = new Framework();
return m_Instance;
}

//getWindow
sf::RenderWindow* Framework::GetWindow()
{
return &m_Window;
}

//Update
void Framework::Update()
{
ElapsedTime = m_Clock->GetElapsedTime();
m_Clock->Reset();
}

//Render
void Framework::Render()
{
GetWindow()->Clear(sf::Color(0, 0, 0));
GetWindow()->Display();
}

//run
void Framework::Run()
{
while(GetWindow()->IsOpened())
{
while(GetWindow()->GetEvent(m_Event))
{
if(m_Event.Type == sf::Event::Closed)
GetWindow()->Close();
HandleEvents();
}

Update();
Render();

}


}

//events
void Framework::HandleEvents()
{

if(GetWindow()->GetInput().IsKeyDown(sf::Key::Escape)) 
GetWindow()->Close();


}


#ifndef __SPRITES__
#define __SPRITES__

#include <SFML/Graphics.hpp>
#include <string>
#include "Framework.h"

class Sprite
{
public:
Sprite();
~Sprite();
void Load();
void Render();

private:
Sprite *m_Instance;
sf::RenderWindow *m_Window;
sf::Image m_Image;
sf::Sprite *m_Sprite;
};




#endif


#include "Sprites.h"


//reserv memory
Sprite::Sprite()
{
if(m_Instance == NULL)
m_Instance = new Sprite;
}


//delete memory
Sprite::~Sprite()
{
delete m_Instance;
}

//Image Laden
void Sprite::Load()
{
m_Image.LoadFromFile("Background.png");
m_Sprite->SetImage(m_Image);
}

void Sprite::Render()
{


}



So das Problem ist folgendes.
Ich weiß nicht wie ich den Zeiger m_Window von Typ sf::RenderWindow in meine Sprite Klasse bekoomme, so, dass ich mei Sprite damit rendern kann.

Weiß da einer eine Lösug für mein Problem?

Danke
tutti colpevole, nessuno colpevole. - Wenn einer Schuld ist, sind Alle Schuld.
Die Mafia ist wie ein Staat. Sie mordet nicht, Sie richtet hin.

Wenn man zwei Stunden lang mit einem Mädchen zusammensitzt, meint man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen Ofen, meint man, es wären zwei Stunden. Das ist Relativität. (Albert Einstein)

Mein System

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

10.10.2010, 12:16

du hast in der sfml doch schon eine spriteklasse. das image solltest du ausserhalb laden damit du es mehrfach verwenden kannst.
die windowinstanz übergibt man dann direkt beim zeichnen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Iljaronaldo

Treue Seele

  • »Iljaronaldo« ist der Autor dieses Themas

Beiträge: 99

Wohnort: Hadamar

Beruf: Schüler[9.Klasse Realschule]

  • Private Nachricht senden

3

10.10.2010, 12:21

du hast in der sfml doch schon eine spriteklasse. das image solltest du ausserhalb laden damit du es mehrfach verwenden kannst.
die windowinstanz übergibt man dann direkt beim zeichnen.

Ich wollte es strukturierter aufbauen erstmal, aber hat nicht so wirklich geklappt.Bzw. ich hatte nicht so wirklich den Plan wie man es am besten machen sollte.

Du meinst also das image einfach direkt in der Framework Klasse laden und dort weiterarbeiten?
Und wie verhält es sich eigt. mit dem image.Das heißt ich brauche mehrere Instanzen, da später ja noch andere Sachen hinzukommen wie Spielersprite usw..
Mit überschrieben wirds wohl nicht klappen, da dann irgendwas falsch gerendert wird?
tutti colpevole, nessuno colpevole. - Wenn einer Schuld ist, sind Alle Schuld.
Die Mafia ist wie ein Staat. Sie mordet nicht, Sie richtet hin.

Wenn man zwei Stunden lang mit einem Mädchen zusammensitzt, meint man, es wäre eine Minute. Sitzt man jedoch eine Minute auf einem heißen Ofen, meint man, es wären zwei Stunden. Das ist Relativität. (Albert Einstein)

Mein System

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

10.10.2010, 12:30

du brauchst pro bild auf der festplatte ein image.
am besten wäre ein resourcenmanager.
wenn du z.b. eine spielerfigur hast solltest du dafür eine eigene klasse haben die alles(auch das sprite) enthält und verwaltet. genau so ist es auch mit gegnern oder objekten(weiß ja nicht was du programmieren willst) beim erstellen dieser objekte übergibst du einfach eine referenz auf das image die dann weiter an das sprite geleitet wird.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

5

10.10.2010, 12:47

Nur als Hinweis, im Wiki der SFML gibt es wenn ich mich recht erinnere schon einen ResourceManager, da kannst du dir anschauen, wie das funktioniert.

6

10.10.2010, 14:07

Nur als Hinweis, im Wiki der SFML gibt es wenn ich mich recht erinnere schon einen ResourceManager, da kannst du dir anschauen, wie das funktioniert.

Hier der Link: SFML Generalized Resource Manager

Gruß
SaRu_

7

11.10.2010, 19:10

Hol dir mal nen anständiges Singleton-Template von dem du erbst. Is ja so grausam ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

11.10.2010, 19:19

Oder noch besser gar keine Singletons verwenden :P

9

12.10.2010, 01:00

Oder noch besser gar keine Singletons verwenden :P
... wie machst du es, dot?

Gruß
SaRu_

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

12.10.2010, 01:03

Ohne Singletons ^^. Wie das Design genau aussieht hängt natürlich von der konkreten Anwendung ab...

Warum z.B. muss die Framework Klasse z.B. ein Singleton sein? Ich würde einfach eine Instanz von einem Framework oder Renderer oder was auch immer haben und alle Objekte die was mit dem Framework tun müssen haben dann eben eine Referenz auf ihr Framework Objekt.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (12.10.2010, 01:11)


Werbeanzeige