10Ms-Berechnung für ein paar Linien...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Fetze

Betreff: 10Ms-Berechnung für ein paar Linien...

BeitragMi, Jun 02, 2004 6:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hiho
Hab da grad ein Problem mit der Sternenberechnung in StarTrade (http://www.fetzenet.de): Die benötigt nämlich 10 Ms Berechnungszeit pro Frame und das ist mehr als de gesamte Rest zusammen benötigt. Ich hab bereits nachgesehen, aber ich finde den "Fehler" in meiner Sternenroutine nicht. Und ja, ich weis, dass "Line" langsam ist. abeer so langsam kann es nun auch nicht wieder sein...

Code: [AUSKLAPPEN]

Function Stars()

   If starfield=1 Then ;Sternenfeld-Typ: 1=Parallax 0=sich je nach Speed verändernde Linien

      TileBlock sterne(1), xmap/2.4,ymap/2.4

      TileImage sterne(2), xmap/1.8,ymap/1.8

      TileImage sterne(3), xmap/1.2,ymap/1.2

   Else

      For startemp=1 To stars

         ebene#=.8 ;Ebene berechnen

         If startemp < stars/5 Then ebene#=.4

         If startemp < stars/5*2 Then ebene#=.5

         If startemp < stars/5*3 Then ebene#=.6

         If startemp < stars/5*4 Then ebene#=.7

         sternx#(startemp)=sternx#(startemp)-xspeed#(0)*ebene#*timecode# ;bewegen. Timecode ist ein Multiplikator, den ich überall dazuzähle, um FPS-unabhängige Bewegungen zu bekommen

         sterny#(startemp)=sterny#(startemp)+yspeed#(0)*ebene#*timecode#

         If sternx#(startemp) < 0 Then

            sternx#(startemp)=800

            sterny#(startemp)=Rnd(0,600)

         End If

         If sternx#(startemp) > 800 Then

            sternx#(startemp)=0

            sterny#(startemp)=Rnd(0,600)

         End If

         If sterny#(startemp) < 0 Then

            sterny#(startemp)=600

            sternx#(startemp)=Rnd(0,800)

         End If

         If sterny#(startemp) > 600 Then

            sterny#(startemp)=0

            sternx#(startemp)=Rnd(0,800)

         End If

         If Int(Float(startemp)/2)=Float(startemp)/2 Then ;einige Sterne in gleicher Ebene sind heller, andere dunkler.

            If ebene#=.8 Then Color 240,240,250

            If ebene#=.7 Then Color 220,220,225

            If ebene#=.6 Then Color 200,200,210

            If ebene#=.5 Then Color 175,175,180

            If ebene#=.4 Then Color 150,150,160

         Else

            If ebene#=.8 Then Color 150,150,160

            If ebene#=.7 Then Color 125,125,130

            If ebene#=.6 Then Color 100,100,110

            If ebene#=.5 Then Color 90,90,95

            If ebene#=.4 Then Color 80,80,90

         End If

         Line sternx#(startemp)+shakeX#,sterny#(startemp)+shakeY#,sternx#(startemp)+xspeed#(0)*(ebene#-.2)*3+shakeX#,sterny#(startemp)-yspeed#(0)*(ebene#-.2)*3+shakeY#
                        ;Stern malen
      Next

   End If

End Function


Warum ist diese Routine so langsam?!
Achja, ich hab um die 200 Sterne.

BladeRunner

Moderator

BeitragMi, Jun 02, 2004 7:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Line ist hier wohl schon ein arg limitierender Faktor. Schon mal mit ner eigenen Line-Routine versucht ?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

regaa

BeitragMi, Jun 02, 2004 8:59
Antworten mit Zitat
Benutzer-Profile anzeigen
benutz rect 0,0,100,1 bzw. rect 0,0,1,100 bewirkt wahre wunder Wink, benutze ebenso TEXT GARRRRR NICHT, zumindest nicht in echtzeit, dafür ist es zu langsam, wirklich viel zu langsam. Ein einziger Text mit einem Buchstaben macht da mehr als 10ms aus Evil or Very Mad .
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Suco-X

Betreff: ........

BeitragMi, Jun 02, 2004 9:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

benutz rect 0,0,100,1 bzw. rect 0,0,1,100 bewirkt wahre wunder , benutze ebenso TEXT GARRRRR NICHT, zumindest nicht in echtzeit, dafür ist es zu langsam, wirklich viel zu langsam. Ein einziger Text mit einem Buchstaben macht da mehr als 10ms aus


Arg, so ein Quatsch. Der Text Befehl hat nur mal bei "einer" Nvidia Treiber Version schlapp gemacht, das ist aber schon laaanggeee her.
Ich dachte so langsam wäre dieses Lächerliche Gerücht mal aus der Welt.
Dazu habe ich auch einen kleinen Test mal gemacht :


Code: [AUSKLAPPEN]

Graphics 1024,768,16,2
SetBuffer BackBuffer()

Const zeichen_anzahl = 1000

Repeat
Cls

startzeit = MilliSecs()

For i = 0 To zeichen_anzahl
   Text 512,384,"TEST0RN"
Next

endzeit = MilliSecs()-startzeit

Text 0,0,"MS:"+endzeit

Flip
Until KeyHit(1)


Hier wird 1000 mal das Wort Test0rn geschrieben. Insgesamt also 7000 Buchstaben pro Schleifendurchgang. Das sind bei mir nur 50 ms.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Jan_

Ehemaliger Admin

BeitragMi, Jun 02, 2004 10:14
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir hat es 145 MS!

(600 MHZ und intel graka)
between angels and insects
 

Apocalyptic

BeitragMi, Jun 02, 2004 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Da dir Rect hier nichts bringt, versuchs mal mit Lockbuffer. Aus dem Speedoptimierungstutorial von The Shadow:

Zitat:
#33 - Line beschleunigen
Line funktioniert nur sehr langsam. Mit einem Trick kann es beschleunigt werden. Wendet den Befehl LOCKBUFFER bei vielen Linien an. LOCKBUFFER funktioniert ausnahmsweise zusätzlich noch mit Line. Dies bring etwa 10% mehr Speed - allerdings kann Line danach nicht außerhalb des Bildschirms erscheinen.
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

Fetze

BeitragMi, Jun 02, 2004 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon versucht, bringt nur 1 Ms

regaa

Betreff: Re: ........

BeitragMi, Jun 02, 2004 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Suco-X hat Folgendes geschrieben:
Zitat:

benutz rect 0,0,100,1 bzw. rect 0,0,1,100 bewirkt wahre wunder , benutze ebenso TEXT GARRRRR NICHT, zumindest nicht in echtzeit, dafür ist es zu langsam, wirklich viel zu langsam. Ein einziger Text mit einem Buchstaben macht da mehr als 10ms aus


Arg, so ein Quatsch. Der Text Befehl hat nur mal bei "einer" Nvidia Treiber Version schlapp gemacht, das ist aber schon laaanggeee her.
Ich dachte so langsam wäre dieses Lächerliche Gerücht mal aus der Welt.
Dazu habe ich auch einen kleinen Test mal gemacht :


Code: [AUSKLAPPEN]

Graphics 1024,768,16,2
SetBuffer BackBuffer()

Const zeichen_anzahl = 1000

Repeat
Cls

startzeit = MilliSecs()

For i = 0 To zeichen_anzahl
   Text 512,384,"TEST0RN"
Next

endzeit = MilliSecs()-startzeit

Text 0,0,"MS:"+endzeit

Flip
Until KeyHit(1)


Hier wird 1000 mal das Wort Test0rn geschrieben. Insgesamt also 7000 Buchstaben pro Schleifendurchgang. Das sind bei mir nur 50 ms.
bye


Hab eine Radeon 9000, über 100ms, außerdem vergrößer mal die schrift ein bissel dann kommst du auf werte jenseits gut und böse. Ich für meinen Teil hab gelernt nie und nimmer Text in Echtzeit zu benutzen.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Suco-X

Betreff: ......

BeitragMi, Jun 02, 2004 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Gesagt, getan. Bei geladenen Font(Arial oder Comic sans als test) bei einer größe von 80 und Fett. 110 ms erreiche ich da. Ich denke nicht gerade viel. Alleine schon deine erste Aussage hast du doch oben durchkreuzt. 10 ms bei einem Buchstabe? Und jetzt auf einmal 100 ms bei 7000 ?
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am Mi, Jun 02, 2004 17:03, insgesamt einmal bearbeitet

regaa

BeitragMi, Jun 02, 2004 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
jo, stimmt, war zu hoch gegriffen mit 10 ms. Brauchst mich deswegen trotzdem nicht so anzufahren.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Fetze

BeitragMi, Jun 02, 2004 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo? Mein Problem besteht immernoch. Sorry, dass ich mich hier in euren
Plausch einmische, aber das hier ist ein Thread, den ich eröffnet habe, um eine Antwort auf meine Frage zu bkeommen.

Hubsi

BeitragDo, Jun 03, 2004 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast Du Rect schon versucht?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Fetze

BeitragDo, Jun 03, 2004 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo?!

Ich brauche nicht nur gerade Linien sondern auch schräge, was ja wohl logisch ist, wenn man sich die Routine mal genauer ansieht. Also, von Line kann ich wohl nicht weg gehen.
 

Apocalyptic

BeitragDo, Jun 03, 2004 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist jetzt nicht so der Hammer, aber verbessere mal deine If-Abfragen, da sind einige "unnütz"...


Code: [AUSKLAPPEN]
Function Stars()

If starfield=1 Then ;Sternenfeld-Typ: 1=Parallax 0=sich je nach Speed verändernde Linien

TileBlock sterne(1), xmap/2.4,ymap/2.4

TileImage sterne(2), xmap/1.8,ymap/1.8

TileImage sterne(3), xmap/1.2,ymap/1.2

Else

For startemp=1 To stars

ebene#=.8 ;Ebene berechnen

Select True
   Case startemp < stars/5
      ebene#=.4

   Case  startemp < stars/5*2
      ebene#=.5

   Case  startemp < stars/5*3
      ebene#=.6

   Case  startemp < stars/5*4
      ebene#=.7

End Select

sternx#(startemp)=sternx#(startemp)-xspeed#(0)*ebene#*timecode# ;bewegen. Timecode ist ein Multiplikator, den ich überall dazuzähle, um FPS-unabhängige Bewegungen zu bekommen

sterny#(startemp)=sterny#(startemp)+yspeed#(0)*ebene#*timecode#

If sternx#(startemp) < 0 Then

sternx#(startemp)=800

sterny#(startemp)=Rnd(0,600)

ElseIf sternx#(startemp) > 800 Then

sternx#(startemp)=0

sterny#(startemp)=Rnd(0,600)

End If

If sterny#(startemp) < 0 Then

sterny#(startemp)=600

sternx#(startemp)=Rnd(0,800)

ElseIf sterny#(startemp) > 600 Then

sterny#(startemp)=0

sternx#(startemp)=Rnd(0,800)

End If

If Int(Float(startemp)/2)=Float(startemp)/2 Then ;einige Sterne in gleicher Ebene sind heller, andere dunkler.

Select ebene#
   Case .8
      Color 240,240,250
   Case .7
      Color 220,220,225
   Case .6
      Color 200,200,210
   Case .5
      Color 175,175,180
   Case .4
      Color 150,150,160
End Select

Else

Select ebene#
   Case .8
      Color 150,150,160
   Case .7
      Color 125,125,130
   Case .6
      Color 100,100,110
   Case .5
      Color 90,90,95
   Case .4
      Color 80,80,90
End Select

End If

Line sternx#(startemp)+shakeX#,sterny#(startemp)+shakeY#,sternx#(startemp)+xspeed#(0)*(ebene#-.2)*3+shakeX#,sterny#(startemp)-yspeed#(0)*(ebene#-.2)*3+shakeY#
;Stern malen
Next

End If

End Function


Theoretisch kannst du auch
Code: [AUSKLAPPEN]
If sternx#(startemp) < 0 Then

sternx#(startemp)=800

sterny#(startemp)=Rnd(0,600)

ElseIf sternx#(startemp) > 800 Then

sternx#(startemp)=0

sterny#(startemp)=Rnd(0,600)

ElseIf sterny#(startemp) < 0 Then

sterny#(startemp)=600

sternx#(startemp)=Rnd(0,800)

ElseIf sterny#(startemp) > 600 Then

sterny#(startemp)=0

sternx#(startemp)=Rnd(0,800)

End If

schreiben

PS: Ich hab keins von beiden getestet
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
  • Zuletzt bearbeitet von Apocalyptic am Do, Jun 03, 2004 20:19, insgesamt 2-mal bearbeitet

Gossi

BeitragDo, Jun 03, 2004 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm mal das Line raus und schau, ob es wirklich nur an diesem Befehl liegt. Wenn das so ist, und selbst eine eigene Routine (CodeArchiv?) nichts bringt, solltest du dir überlegen weniger Sterne zu nehmen oder (was wohl besser ist) die Sterne als Image zu zeichnen. Vielleicht mit LoadImage, oder du erstellst einen Image am Anfang deines Progs, oooder falls jeder Stern anders aussieht, erstellst du ein paar verschiedene Bilder.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group