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

![]() |
FetzeBetreff: 10Ms-Berechnung für ein paar Linien... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
benutz rect 0,0,100,1 bzw. rect 0,0,1,100 bewirkt wahre wunder ![]() ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
Suco-XBetreff: ........ |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
bei mir hat es 145 MS!
(600 MHZ und intel graka) |
||
between angels and insects |
Apocalyptic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schon versucht, bringt nur 1 Ms | ||
![]() |
regaaBetreff: Re: ........ |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-XBetreff: ...... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast Du Rect schon versucht? | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group