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

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

1

20.02.2012, 20:46

SFML Performance-Grenzen

Hi Community,

Ich spiel mich grad mit der Entfernung und bin draufgestoßen, dass wenn man viele Sprites weit weg Rendert, dann kommt manchmal so ein schwarzes Flimmern. Ist es nicht egal wo es gerendert wird? Es müssen ja trotzdem (obs jetz nahe an 0 ist oder bei 10.000+) die Positionen gesetzt werden... Gibt es so "imaginäre" Grenzen? Oder ist das nur bei mir so?^^ Und es laggt! (je weiter weg desto mehr hängt das irgendwie :()

MfG Geheim!

2

20.02.2012, 21:48

Warum zeichnest du dann noch und wie viele zeichnest du überhaupt? Schon mal die Unterschiede beim Zeichnen von Sprites und Fonts der SFML und SDL gesehen? ->Google<-

MfG
Check

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

20.02.2012, 22:10

Entfernung und Performance sollten eigentlich, wenn überhaupt, genau andersherum zusammenhängen. Weiter weg -> kleiner -> weniger Pixel zu zeichnen.
Schwarzes Flimmern?

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

20.02.2012, 22:32

Zitat

Schwarzes Flimmern?


Präzision des depth-Buffers?

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

5

20.02.2012, 23:01

Uups, ich glaub ich habs falsch erklärt. :whistling:
Ich mein, ob es einen Unterschied macht, wenn man die Position von einem Sprite auf (0, 0) oder auf (50000, 40000) setzen würde? (nicht der Zoom sry^^)
Das mit dem Laggen hat sich mitlerweile geklärt, ich hab zu viel auf einmal offen gehabt, also es hängt nicht mehr als sonst, aber das flimmern ist immer noch da. Wenn ich mich bewege, dann sind zwischen den Sprites so kleine schwarze Linien, ich kanns schlecht erklären und einen Screenshot machen geht auch schlecht, weil das sehr unregelmäßig und nur ganz kurz aufblitzt. Aber es passiert NUR beim Bewegen.
Ich benutze Views und wenn ich mich bewege ändert sich nur der View, drum kann ichs mir nicht erklären, weil es vorher auch einwandfrei geklappt hat...

@Checkmateing:
Es sind höchstens 1875 Sprites gleichzeitig, zurzeit schätz ich sinds um die 1000.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

20.02.2012, 23:05

Das spielt prinzipiell keine Rolle.
Es sei denn du übertreibst es, dann wirst du merken, dass die Float-Zahlen immer ungenauer werden.
Die Hälfte aller 32-Bit-Muster, als float interpretiert, beschreibt eine Zahl zwischen -1 und +1 :)

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

7

21.02.2012, 07:12

Aha, ich dachte immer das ist egal solange es im Wertebereich liegt...
Ab wann ist es denn übertrieben? Ich brauch nämlich viel Platz...
Und wenn das nur beim Bewegen passiert, dann ist sicher das mit dem View neu setzen falsch bei mir:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
while(_View->GetRect().Left+400 < _Player.GetPosition().x+_PlayerWidth/2)
        _View->Move(0.1f,0);
    while(_View->GetRect().Left+400 > _Player.GetPosition().x+_PlayerWidth/2)
        _View->Move(-0.1f,0);
    while(_View->GetRect().Top+300 < _Player.GetPosition().y+_PlayerHeight/2)
        _View->Move(0,0.1f);
    while(_View->GetRect().Top+300 > _Player.GetPosition().y+_PlayerHeight/2)
        _View->Move(0,-0.1f);

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

8

21.02.2012, 20:03

Also es liegt eindeutig an dem View! Ich habs grad probiert, ohne ihn jeden Frame neu zu setzen, hat ohne Probleme (flimmern) geklappt!

Setz ich den View umständlich? Gibt es eine "elegantere" Variante den View immer so zu setzen, dass der Player im Mittelpunkt steht?
Oder ist es leider so und es bleibt beim flimmern? :(

MfG Geheim!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

21.02.2012, 21:00

Überleg doch mal, was du da machst.
Wieso bewegst du die Kamera nicht direkt da hin, wo sie hin soll?
Stattdessen bewegst du sie immer ein Stück, bis sie da ist, wo du sie willst. Ist doch klar, dass das elendig langsam ist ...

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

10

21.02.2012, 21:13

C-/C++-Quelltext

1
_View->SetCenter(_Player.GetPosition().x+_PlayerWidth/2, _Player.GetPosition().y+_PlayerHeight/2);


Peinlich, ich hasse Fehler die man selber hätte finden müssen und nicht andere unnötig damit verwirrt...

Ich hab schonmal mit GetCenter() experimentiert und es ist egal wo der View war es ist immer für x=400 und y=300 herausgekommen und ich hab nicht gedacht, dass es mitSetCenter() funktioniert...

Danke und sry, hätte dieses Mal echt nicht sein müssen^^

Werbeanzeige