wie gibt man text schnell auf grafik aus?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
DenKle
Beiträge: 16
Registriert: 30.10.2008 20:30

Re: wie gibt man text schnell auf grafik aus?

Beitrag von DenKle »

also ich habe das mal zusammen genommen und egal mit welchem sync ruckelt es...

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

OpenScreen(800,600,32,"Test",#PB_Screen_SmartSynchronization) ;egal ob smart, wait oder no es ruckelt

CreateSprite(999,8,8)
StartDrawing(SpriteOutput(999))
  Box(0,0,8,8,RGB(0,255,255))
StopDrawing()

LoadFont(123,"Impact",28)

FPS = 30
TimerDuration = 1000 / FPS

Repeat

  ; ** Zeit zu beginn des Schleifendurchlaufs rückspeichern
  timer = ElapsedMilliseconds()
  ; **

  ExamineKeyboard()
  ExamineMouse()
  
  ClearScreen(RGB(50,100,200))
  
  StartDrawing(ScreenOutput())
  DrawingFont(FontID(123))
  DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(100,50,"text text text text text")
    DrawText(100,100,"text text text text text")
    DrawText(100,150,"text text text text text")
    DrawText(100,200,"text text text text text")
    DrawText(100,250,"text text text text text")
    DrawText(100,300,"text text text text text")
    DrawText(100,350,"text text text text text")
    DrawText(100,400,"text text text text text")
    DrawText(100,450,"text text text text text")
    DrawText(100,500,"text text text text text")
  StopDrawing()
  
  DisplaySprite(999,MouseX(),MouseY())
  
  ; ** Aktuelle Differenz zwischen Soll-Zeit ( TimerDuration )
  ; ** und tatsächlich verstrichener Zeit ermitteln
  TimeGap = TimerDuration - (ElapsedMilliseconds() - Timer)
  ; ** wenn die größer ist als 16 ms, per Delay warten
  If TimeGap > 16
   ; ** ein bißchen weniger warten, Luft lassen
    Delay( TimeGap - 10 )
  EndIf
  ; ** den Rest des Wartens überlassen wir FlipBuffers
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
nur mit

Code: Alles auswählen

OpenScreen(800,600,32,"Test",#PB_Screen_NoSynchronization)
SetFrameRate(60)
gehts es bei mir
Zuletzt geändert von DenKle am 19.01.2010 15:34, insgesamt 1-mal geändert.
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: wie gibt man text schnell auf grafik aus?

Beitrag von WPö »

Ahhh. Jetzt geht's!

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

;OpenScreen(800,600,32,"")
OpenScreen(800,600,32,"Test",#PB_Screen_NoSynchronization)
SetFrameRate(60)

CreateSprite(999,8,8)
StartDrawing(SpriteOutput(999))
  Box(0,0,8,8,RGB(0,255,255))
StopDrawing()

LoadFont(123,"Impact",28)

Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  ClearScreen(RGB(50,100,200))
  
  StartDrawing(ScreenOutput())
  DrawingFont(FontID(123))
  DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(100,50,"text text text text text")
    DrawText(100,100,"text text text text text")
    DrawText(100,150,"text text text text text")
    DrawText(100,200,"text text text text text")
    DrawText(100,250,"text text text text text")
    DrawText(100,300,"text text text text text")
    DrawText(100,350,"text text text text text")
    DrawText(100,400,"text text text text text")
    DrawText(100,450,"text text text text text")
    DrawText(100,500,"text text text text text")
  StopDrawing()
  
  DisplaySprite(999,MouseX(),MouseY())
  
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
Der Mauszeiger hakt nur noch selten für ein oder zwei Bilder bei 60Hz. Habe aber auch etliche (um die 20) Programme im Hintergrund. Das Programm zieht immer noch 99% Rechenleistung. Mit einem Delay(2) in der Schleife werden immer noch 70% verbraten. Was geht denn da ab?

Kaeru: :oops: So Spiele-Zeug habe ich seit über 10 Jahren nicht mehr verwendet, seitdem nur noch Anwendungen. Hauptsächlich GUI, Datei-IO und Berechnungen.

Gruß - WPo
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: wie gibt man text schnell auf grafik aus?

Beitrag von WPö »

DenKle hat geschrieben:also ich habe das mal zusammen genommen und egal mit welchem sync ruckelt es...
Jetzt schau erstmal, was in der Schleife die Rechenzeit zieht. Die Programmanalyse hilft hier ja nicht weiter.

Gruß - WPo
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: wie gibt man text schnell auf grafik aus?

Beitrag von Kaeru Gaman »

also ich habe das mal zusammen genommen und egal mit welchem sync ruckelt es...
meinst du jetzt mit "ruckeln" dass die Maus zuckelt oder "nur" dass die Darstellung ungleichmäßig ist?

wenn letzteres der Fall ist, kann es auch einfach daran liegen, dass dein Monitor mit 75Hz läuft,
und dann wirst du niemals eine saubere Synchronität mit 60 FpS hinbekommen.
da sind vier Frames mit fünf VSyncs synchron, das muss zuckeln.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DenKle
Beiträge: 16
Registriert: 30.10.2008 20:30

Re: wie gibt man text schnell auf grafik aus?

Beitrag von DenKle »

ich meine die maus
mein monitor leuft mit 60hz

:(
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: wie gibt man text schnell auf grafik aus?

Beitrag von Kaeru Gaman »

aaaach momendemal...
da war noch irgendwas, dass Drawing auf den Screen mit DX9 nicht wirklich gut funktioniert...
und ein zusätzliches Problem, was ich am Rande aufgeschnappt habe, dass DX9 nicht standardmäßig bei Vista und Win7 dabei ist, und dass DX10 nicht voll abwärtskompatibel ist....

also muss ich es ohne sync und mit setframerate machen und am ende der schleife kommt noch nen delay(1)
öhm... nuja... wenn du so willst, aber das ist meiner Ansicht nach die uneleganteste Lösung.


wenn du ein Game machen willst, ist es vielleicht sowieso schöner, Spritefonts zu benutzen.
DRAW-Fonts sind immer nur einfarbig, und du kannst dich auch nicht drauf verlassen, dass sie auf dem Zielrechner wirklich vorhanden sind.
also musst du Fonts selber machen oder Free-Fonts im Netz finden, und diese mitliefern.
oder du benutzt solchen Einfach-Krempel wie Arial, Verdana, CourierNew und TimesNewRoman.

bei Sprite-Fonts kannst du deiner Kreativität freien Lauf lassen, sie sind sogar mit PAINT einfach zusammenzustellen,
du hast mit sicherheit alles auf dem Zielrechner vorhanden, weil du es mitlieferst,
und du kanst beliebig viele Farben in jeden einzelnen Buchstaben packen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DenKle
Beiträge: 16
Registriert: 30.10.2008 20:30

Re: wie gibt man text schnell auf grafik aus?

Beitrag von DenKle »

ich muss es mit spritefont machen weil ich grade gemerkt habe das setframerate(60) garnicht geht
weil die sprites im spiel sich nun blitzschnell bewegen...
und wenn ich deinen code einbaue geht es auch nicht denke das liegt halt an win7 :(
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: wie gibt man text schnell auf grafik aus?

Beitrag von Kaeru Gaman »

achja... DX9 und SetFrameRate vertragen sich auch nicht.
DX7 dagegen verträgt sich nicht gut mit Aero.

... ich müßte mir echt mal ne Liste machen, was wo wie nicht/eingeschränkt funktioniert.

wie schon gesagt, ein echter Timer wäre sowieso besser.
das Beispiel von mir...
also, da kannst du mit NoSync arbeiten, aber trotzdem wird das dann getimert, also die Sprites sausen nicht, und das zuckel-Problem sollte nicht mehr auftreten und die CPU wird auch nicht gebraten.


und nuja, je nachdem was du machen willst...
wenn du mit einem WindowedScreen arbeitest, kannst du auch Window-Timer benutzen, dann wird das noch mal ne Ecke bequemer.
dafür stellen sich dann neue Herausforderungen, wie anderes Maus-, Keyboard- und zusätzliches Focus-Händling.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DenKle
Beiträge: 16
Registriert: 30.10.2008 20:30

Re: wie gibt man text schnell auf grafik aus?

Beitrag von DenKle »

egal ob mit wait, smart oder no sync, egal ob mit oder ohne fpslimit es leuft nicht!
cpu auslastung ohne ende und framerate im keller :angry:
Zuletzt geändert von DenKle am 20.01.2010 19:54, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: wie gibt man text schnell auf grafik aus?

Beitrag von Kaeru Gaman »

also ich hab zwar kein Win7, deswegen kann ichs nicht testen, aber ganz so wie du's darstellst ist es nicht.

ein Kernproblem ist, dass DX9 nicht bei Win7 mitgeliefert wird.
also, falls du es noch nicht extra zusätzlich installiert hast, hast du es nicht, sondern benutzt die mangelhafte Abwärtskompatibilität von DX10.
dann kannst du dich nicht bei PureBasic beschwehren, weil das mit DX9 arbeitet, nicht mit DX10.

dass ein paar Dinge unter DX9 anders laufen als unter DX7 ist auch bekannt.
da muss man sich eben drauf einstellen.

deine Rückmeldung ist leider zu ungenau als dass ich dir jetzt weiterhelfen könnte, welche Kniffe anzuwenden sind.
egal ob mit wait, smart oder no sync, egal ob mit oder ohne fpslimit es leuft nicht!
cpu auslastung ohne ende und framerate im keller
- Drawing auf den Screen mit DX9 nur eingeschränkt. besser Spritefont verwenden.
- SetFrameRate keine Funktionalität unter DX9, besser Timer verwenden.

usw.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten