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

wie gibt man text schnell auf grafik aus?

Beitrag von DenKle »

ich will in meinem spiel text transparent anzeigen zb für den highscore oder so...
aber es ruckelt o0

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

OpenScreen(800,600,32,"")

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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: warum ist das so langsam & wie gebe ich text schneller aus?

Beitrag von Kaeru Gaman »

warum ist das so langsam
also, bei mir ist das nicht langsam.

- welche PureBasic Version benutzt du?
- welches Grafik-Subsystem hast du eingestellt?
- welches Betriebssystem benutzt du?
- was für eine Grafikkarte hast du?
- CPU und Hauptspeicher ist auch interessant.

wie gebe ich text schneller aus?
grundsätzlich ist die Darstellung von Sprites schneller, also du kannst einen vorhandenen Sprite-Font code
aus dem Code-Archiv oder dem Forum verwenden, oder dir fix selber was schreiben.


aber wie oben gesagt, eigentlich ist das bißchen Drawing nicht sonderlich langsam,
also erst mal rausfinden woran das liegt, sonst dokterst du an der falschen Baustelle herum.
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 »

probiert habe ich es mit: PB 4.40 & 4.41rc1, 32 & 64Bit, DirectX9 & 7...
mein PC: Windows7 64Bit, 4GBRAM, Core2Quad 4x2500MHz, Radeon HD4850 1GB


also bei mir kann ich den maus zeiger nicht mehr richtig bewegen
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: wie gibt man text schnell auf grafik aus?

Beitrag von Kiffi »

bei mir (Vista Business 32Bit) läuft's auch zufriedenstellend schnell.
Der Mauszeiger lässt sich flüssig bewegen.

Grüße ... Kiffi
a²+b²=mc²
DenKle
Beiträge: 16
Registriert: 30.10.2008 20:30

Re: wie gibt man text schnell auf grafik aus?

Beitrag von DenKle »

also wenn bei euch der zeiger nicht hargt ist das wohl ein "purebasic+windows7" bezogenes problem...
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ö »

Bei mir flimmert der Text nicht, der Mauszeiger aber ruckelt. Das Programm saugt 99% Rechenzeit, da keine Wartezeit eingebaut ist. Allerdings ist mein System schon etwas betagt: Centrino mit 1,86GHz und 2GB RAM, NVidia Go6800.
Warte doch auf ein Auffrischen des Bildinhalts und eine Veränderung des Textes, um neu zu schreiben.

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.
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: wie gibt man text schnell auf grafik aus?

Beitrag von Christian+ »

Bei mir läuft es ohne zu ruckeln mit PB 4.40 (64 Bit und 32 Bit) auf Windows 7 64 Bit. den Text zeigt es aber nur mit DirectX 7 an mit DirectX 9 sehe ich ihn nicht (werde mal schauen ob das Problem in 4.41 rc1 immer noch da ist).

Edit: Nun getestet mit PB 4.41 RC1 64 Bit unter DirectX 7 geht alles bei DirectX 9 sehe ich bei dem Beispiel Code von oben aber weiterhin keinen Text.

mfg Christian+
Zuletzt geändert von Christian+ am 19.01.2010 15:00, insgesamt 1-mal geändert.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: wie gibt man text schnell auf grafik aus?

Beitrag von Kaeru Gaman »

WPo hat geschrieben:Warte doch auf ein Auffrischen des Bildinhalts und eine Veränderung des Textes, um neu zu schreiben.
für eine Fensteroberfläche hättest du recht, aber beim Screen muss in jedem Frame alles wieder dargestellt werden.

@DenKle

Ändere mal die Art der Sync:

Code: Alles auswählen

OpenScreen(800,600,32,"Test",#PB_Screen_SmartSynchronization)
ich hatte vermutet, dass es vielleicht ein DX7+Aero Problem ist, deswegen die Frage nach deinem System.

wir sollten jetzt herausfinden, wo die Gemeinsamkeiten von Deinem und WPo's System liegen, dann kommen wir der Ursache auf die Spur.
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 »

geht nicht aber mit

Code: Alles auswählen

OpenScreen(800,600,32,"Test",#PB_Screen_NoSynchronization)
geht es :)

aber nun habe ich ja kein framerate limit mehr deswegen

Code: Alles auswählen

SetFrameRate(60)
aber bei

Code: Alles auswählen

SetFrameRate(30)
geht es wieder nicht was mir eigentlich egal ist weil es ja bei 60 geht was ich wollte aber???
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, timing solltest du eher über nen Timer machen als über SetFrameRate.

mal ein beispiel wie man das beginnen kann:
http://www.purebasic.fr/german/viewtopic.php?t=17400

da die GetTickCount-API die ElapsedMilleseconds zugrundeliegt nicht genau genug ist für schneller als 30FpS, solltest du dir mal die Time-API ansehen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten