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

91

21.06.2010, 15:36

Danke für die Antwort :)

Zu Video: Bei "Draw(sprite)" sollte es eigl. "Draw(renderObject)" heißen :P

Was meinst du mit SRP?
Video dient dazu Direct3D zu initialisieren und die nötigen Schnittstellen anzubieten(Device etc.)

bsp:

C-/C++-Quelltext

1
2
3
4
5
b2d::Video video(800, 600, 32); //init d3d: Width(800), Height(600), Colordepth(32)

b2d::TextureManager* texManager = NULL; //empty pointer for new textureManager

video.CreateTextureManager(texManager); //create textureManager


Zu Sprite::SetTexture: Wie könnte das klappen?
Das Sprite benötigt eine Textur und das Font eine TrueTypeFont, das ist ja nicht das gleiche.

idontknow

unregistriert

92

21.06.2010, 15:44

Ansichtssache! Prinzipiell ist es nähmlich das selbe. Immerhin ist die Font auch nur ne Bild Datei mit mehreren Buchstaben für versch. Schriftgrößen ect.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

93

21.06.2010, 16:31

Danke für die Antwort :)

Zu Video: Bei "Draw(sprite)" sollte es eigl. "Draw(renderObject)" heißen :P

Was meinst du mit SRP?
Video dient dazu Direct3D zu initialisieren und die nötigen Schnittstellen anzubieten(Device etc.)


SRP = Single Responsibility Principle.


Zu Sprite::SetTexture: Wie könnte das klappen?
Das Sprite benötigt eine Textur und das Font eine TrueTypeFont, das ist ja nicht das gleiche.


Naja, vielleicht hat das ja auch seine Richtigkeit. Wie gesagt, ich hab nur das erwähnt was ich aus dem Diagramm entnehmen konnte, was leider nicht viel war. ;)
@D13_Dreinig

94

26.06.2010, 23:33

Ich habe mich jetzt mal an die Umsetzung des Diagramms gesetzt und habe folgendes Problem.
Man soll ja mit der "Video" klasse einen neuen Texturen Manager erzeugen können aber folgendes beispiel zeigt wie sinnlos das ist:

C-/C++-Quelltext

1
2
3
4
5
b2d::Video video(//params); //create new d3d wrapper

b2d::TextureManager manager; //create new manager object

video.CreateTextureManager(&manager); //create the manager


Das sieht ja gar nicht so blöd aus ABER:

C-/C++-Quelltext

1
2
3
4
5
//Die CreateTextureManager Funktion
void Video::CreateTextureManager(TextureManager* manager)
{
     manager->mDevice = mDevice; //give the manager the videos device
}


Das find ich total lächerlich, da der Manager nur 2 Variablen hat. Die copy vom Device und die Texturenliste.
Warum so eine dumme Funktion schreiben wenn man es doch machen könnte:

C-/C++-Quelltext

1
b2d::TextureManager manager(video->GetDevice()); //create new manager

idontknow

unregistriert

95

27.06.2010, 01:14

Ich verstehe a) nicht wie du auf ersteres gekommen bist, und b) was Texturen/-Manager mit der Video (D3D/Device-KLasse) gemeinsam haben soll.
Hätte direkt den 2ten Ansatz verwendet!

edit: denke mal ich werde für mein Framework diese oder nächste Woche auch einen ähnlichen Thread machen, auch wenn es noch kaum Dinge kann außer nen groben Input, erstellen vom Device und einige kleine Hilfe-Klassen ;). Aber wenigstens kannman dann schon grüher Verbesserungsvorschläge geben!

96

28.06.2010, 20:00

Also was die gemiensam haben ist ja wohl klar, das Device, bzw. beide benötigen es.
Ich wollte den 2. Ansatz nicht nehmen, da mir hier schon gesagt wurde, dass man "per Parameter" vermeiden sollte.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

97

28.06.2010, 21:00

Ich find den ersten Ansatz besser. Das Device musst du im allgemeinen doch garnicht von Aussen kennen, ich würde also versuchen GetDevice komplett raus zu schmeissen. Allerdings würde ich CreateTextureManager ggf in InitializeTextureManager umbenennen.
@D13_Dreinig

98

01.07.2010, 18:30

Ich sitz hier grad so schön in der Sonne, da habe ich mich gefragt welche Variante des Spriterenderns ihr besser finden würdet.

1. Variante

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//... window erstellen etc.

b2d::Texture texture;

textureManager.LoadTexture("TheTexture.bmp", &texture);

b2d::Sprite sprite(&texture); //textur setzen (optional)

sprite.SetTexture(&texture); //oder so auch

sprite.SetPosition(100, 200); //position setzen
sprite.SetOrientation(34.6f); //rotation setzen
sprite.SetColor(b2d::Color::Blue); //farbe setzen
sprite.SetScale(1.3f, 0.9f); //skalierungsfaktor setzen

window.Render(sprite); //zum schluß rendern


2. Variante

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//... window erstellen etc.
b2d::Texture texture;

textureManager.LoadTexture("TheTexture.bmp", &texture);

b2d::Sprite sprite(&texture); //textur setzen (optional)

sprite.SetTexture(&texture); //oder so auch

//rendert den sprite
//1.sprite
//2.position
//3.scaling (optional)
//4.rotation (optional)
//5.farbe (optional)
window.Render(sprite, b2d::Vector2f(200.f, 123.f), b2d::Vector2f(1.34f, 1.2432f), 56.f, b2d::Color(23, 42, 222));

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

99

01.07.2010, 18:35

natürlich die erste variante. bei der zweiten musst du ja jedes mal alles mit angeben.
vorallem weil positionen/rotationen in der updatefunktion bzw. im konstruktor gesetzt werden und nicht in der renderfunktion.
"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?

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

100

01.07.2010, 19:05

Ich finde die 1. auch besser...

Ich würde mich ein wenig an der SFML orientieren ;) Da ist es sehr schön gelöst.

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Werbeanzeige