Leistungsverwaltung
Übersicht

Maikson_18Betreff: Leistungsverwaltung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hey an alle
ich wollt mal fragen ob man irgendwie die Prozessorleistung verwalten kann? weil mein Programm irgendwie 80% von meinem Prozessor schluckt aber nur 9 mb Arbeitsspeicher oder liegst nur daran das ichs vieleicht nen bisschen blöd programmiert habe? is allerdings noch nich ganz fertig :S mfg Maikson Code: [AUSKLAPPEN] Global xmax=800,ymax=600
Graphics xmax,ymax,32,0 SeedRnd MilliSecs() Global xball=xmax/2 Global yball=ymax/2 SeedRnd MilliSecs() Global start=0 Global leben=3 Global xstein2, ystein2 Global geschindigkeit=2 Global score=0 Type Stein Field xstein Field ystein End Type Global frametimer = CreateTimer(60) SetBuffer BackBuffer() ;Deklaration von Ball Global ball = LoadImage("bigball.bmp") MidHandle ball ;Deklaration von Wand Global wand = LoadImage("wand.bmp") Global wand2 = LoadImage("wand2.bmp") ;Deklaration von Stein Global stein = LoadImage("stein.bmp") ;Hauptschleife Repeat WaitTimer (frametimer) Locate 60,60 Print "Leben:" + leben Locate xmax-150,60 Print "Score:" + score ;Spielersteuerung If KeyDown(205) Then xball=xball+3 If KeyDown(203) Then xball=xball-3 If KeyDown(208) Then yball=yball+3 If KeyDown(200) Then yball=yball-3 DrawImage ball,xball,yball ;Senkrechte wand For i=0 To 1 For j=0 To ymax/40 If i=0 Then x=0 Else x=xmax-40 DrawImage wand,x,j*40 Next Next ;Waagerecht Wand For i=0 To 1 For j=0 To (ymax+80)/40 If i=0 Then y=0 Else y=ymax-40 DrawImage wand2,(j*40)+40,y Next Next If start=30 Then DrawStein() start=0 EndIf For s.Stein = Each Stein s\ystein=s\ystein+geschindigkeit DrawImage stein,s\xstein,s\ystein Next ;Kollision mit linker wand If xball <50 Then tod() EndIf ;Kollision mit linker wand If xball > xmax-50 Then tod() EndIf ;Kollision mit oberer wand If yball < 50 Then tod() EndIf ;Kollision mit unterer wand If yball > ymax-50 Then tod() EndIf ;Kollision mit Stein For s.Stein = Each Stein If ImagesCollide(ball,xball,yball,0,stein,s\xstein,s\ystein,0) Then tod() EndIf Next ;Scorezählung Scorezaehlung() start=start+1 Flip Cls Until KeyHit(1);Schleifenende Durch Esc drücken Function DrawStein() s.Stein = New Stein s\xstein#=Rnd (50,750) s\ystein=0 End Function Function tod() Locate 300,300 Print "Du bist gestorben" leben=leben-1 xball=xmax/2 yball=ymax/2 Delay(2000) For s.Stein = Each Stein Delete s.Stein Next End Function Function ScoreZaehlung() For s.Stein = Each Stein If s\ystein>ymax-20 Then score=score+2 Delete s.Stein EndIf Next End Function WaitKey End |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/foru...hp?t=25242 | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Maikson_18 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mh ich denk mal das wohl punkt 1 zu mir passt ![]() danke für den link denn werd ich mich mal an die optimierung machen ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aus dem Dokument dort wirst Du wenig neues erfahren...Hauptthema ist dort die richtige Verwendung von DELAY() und WAITTIMER().
Und das sieht bei Dir schon gut aus! Irgendwas verbrät richtig Leistung bei Dir. Du könntest Zeitmessungen mit Millisecs() durchführen: StartZeit=Millisecs() ...code blabla text 0,0, "Zeitverbrauch Total=" + (Millisecs() - StartZeit) Die Zeile... StartZeit=Millisecs() ...gehört vor "LOCATE 60,60" Die Auswertungzeile... text 0,0, "Zeitverbrauch Total=" + (Millisecs() - StartZeit) ...direkt nach der Zeile "start=start+1" So wie Du es schilderst wird der Zeitverbrauch bei ca 14msec liegen. So, nun kannst Du ans Eingrenzen gehen, füge direkt vor das "For s.Stein = Each Stein" ( jenes, wo gemalt wird) einen neuen Testpunkt text 0,20, "Zeitverbrauch Messpunkt B=" + (Millisecs() - StartZeit) Nun weißt Du, ob der obere oder der untere Abschnitt mehr Zeit verbraucht. Waren es z.B. bei Messpunkt B 4msec und bei TOTAL 14, so hat der erste Teil Deines Codes 4msec, der zweite aber die restlichen 10 msec verbraucht. Tipp: Verschieb mal den CLS oben in die Zeile nach LOCATE, so dass er mitgemessen wird. CLS könnte endlos lange dauern. Auch PRINT könnte problematisch sein. Ersetze es durch TEXT. Schalte für einen Perfomancetest einfach CLS kurz mal aus. Verschieb den WaitTimer() auf kurz vor den FLIP, so dass er nicht mitgemessen wird. Schreib mal FLIP 0 Tipp 2: Wenn Du ohne CLS auskommst, musst Du auch die Wand nicht immer wieder neu zeichnen. Das Spielfeld reinigst Du vielleicht mit einem schwarzen RECT? Tipp 3: Bringt wahrscheinlich keinen Zeitvorteil, aber reicht so: Code: [AUSKLAPPEN] ;Senkrechte wand
For j=0 To ymax Step 40 DrawImage wand,0,j DrawImage wand,xmax-40,j Next |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die richtige Verwendung bei BlitzBasic/Blitz3D mit einem Frametimer bedeutet auch die Verwendung von Flip 0 nicht jedoch Flip oder Flip 1.
Erst nach dieser Kombination kann ein Programm recourcenschonend arbeiten. Die erste Bedingung ist ja bereits gemacht. Fehlt also nur noch eine 0 hinter Flip. Wenn das Programm dann immer noch zu viel Recourcen verschleudert, muß man weiter sehen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich weiß nicht ob das eine Verbesserung bringt, aber ich würde Funktionen grundsätzlich nicht in der Hauptschleife schreiben, lieber am Ende vom Code. | ||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
@N0X: Was erzählst du denn für einen Unsinn?
Funktionen nehmen kaum Leistung weg. Es könnte höchstens etwas bringen, wenn eine Funktion ca. 1000000 pro Sekunde genutzt wird, ihren Inhalt direkt in den Code zu schreiben. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde sagen du ersetzt die LOCATE durch Text... bringt auch mehr Speed. Hab mir dein Proggi angeguckt und habe das Cls nach Repeat hingeschrieben und das Cls unten entfernt. Es läuft bei mir mit 62 FPS. Bei Gameover fahren die FPS in den Keller und dann wieder auf 62. Die Punkte und Das Bildschirmleben sollten dann aber auch neuinitialisiert werden!
lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Bei Gameover fahren die FPS in den Keller und dann wieder auf 62. Die Punkte und Das Bildschirmleben sollten dann aber auch neuinitialisiert werden!
Ist ja auch logisch, da in der Funktion tod() ein Delay 2000 steht. |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
JamaginBetreff: delay |
![]() Antworten mit Zitat ![]() |
---|---|---|
huuu! delay ist böse! Wäre besser zu lösen, wenn man einfach auf einen Tastendruck oder mousehit(1) warten sollte!
In der Function Scorezaehlung reicht ein Delete s und nicht Delete s.Stein und danach ein Exit damit die Schleife wieder verlassen wird! Und wieder anstelle von Locate in der Tod() Function ein Text 300, 300, "Du bist gesto...!" : Flip bringt mehr Speed, da LOCATE langsaaaaam ist...! Code: [AUSKLAPPEN] Function tod() Text 300, 300, "Du bist gestorben": Flip leben=leben-1 xball=xmax/2 yball=ymax/2 While Not MouseHit(1) Wend ; NEUE ZEILE EINGEFÜGT !! For s.Stein = Each Stein Delete s ; Es reicht Delete s Next End Function lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch ein Tipp von mir:
Nutze die TABulator Taste um Zeilen zu verschieben (einzurücken) anstatt die Leertaste. Das geht bedeutend schneller und ist viel übersichtlicher. Code: [AUSKLAPPEN] Global xmax=800,ymax=600
Graphics xmax,ymax,32,0 SeedRnd MilliSecs() Global xball=xmax/2 Global yball=ymax/2 SeedRnd MilliSecs() Global start=0 Global leben=3 Global xstein2, ystein2 Global geschwindigkeit=2 Global score=0 Type Stein Field xstein Field ystein End Type Global frametimer = CreateTimer(40) SetBuffer BackBuffer() ;Deklaration von Ball Global ball = LoadImage("bigball.bmp") MidHandle ball ;Deklaration von Wand Global wand = LoadImage("wand.bmp") Global wand2 = LoadImage("wand2.bmp") ;Deklaration von Stein Global stein = LoadImage("stein.bmp") ;Hauptschleife Repeat WaitTimer (frametimer) Cls Text 60,60,"Leben:" + leben Text xmax-150,60,"Score:" + score ;Spielersteuerung If KeyDown(205) Then xball=xball+3 If KeyDown(203) Then xball=xball-3 If KeyDown(208) Then yball=yball+3 If KeyDown(200) Then yball=yball-3 DrawImage ball,xball,yball ;Senkrechte wand For i=0 To 1 For j=0 To ymax/40 If i=0 Then x=0 Else x=xmax-40 DrawImage wand,x,j*40 Next Next ;Waagerecht Wand For i=0 To 1 For j=0 To (ymax+80)/40 If i=0 Then y=0 Else y=ymax-40 DrawImage wand2,(j*40)+40,y Next Next If start=30 Then DrawStein() start=0 EndIf For s.Stein = Each Stein s\ystein=s\ystein+geschwindigkeit DrawImage stein,s\xstein,s\ystein Next ;Kollision mit linker wand If xball <50 Then tod() EndIf ;Kollision mit linker wand If xball > xmax-50 Then tod() EndIf ;Kollision mit oberer wand If yball < 50 Then tod() EndIf ;Kollision mit unterer wand If yball > ymax-50 Then tod() EndIf ;Kollision mit Stein For s.Stein = Each Stein If ImagesCollide(ball,xball,yball,0,stein,s\xstein,s\ystein,0) Then tod() EndIf Next ;Scorezählung ScoreZaehlung() start=start+1 Flip 0 Until KeyHit(1);Schleifenende Durch Esc drücken End Function DrawStein() s.Stein = New Stein s\xstein#=Rnd (50,750) s\ystein=0 End Function Function tod() Text 300,300,"Du bist gestorben" leben=leben-1 xball=xmax/2 yball=ymax/2 For s.stein = Each Stein Delete s.stein Next End Function Function ScoreZaehlung() For s.stein = Each Stein If s\ystein>ymax-20 Then score=score+2 Delete s.stein EndIf Next End Function - Timer auf 40FPS gesetzt - Delay ![]() - Flip 0 statt Flip 1 (Flip 0 ist schneller) ![]() ![]() - Funktionen ans Ende des Codes platziert (spart kein Speed, aber erhöht Übersicht) Das wäre erstmal eine grobe Optimierung. Übrigens hieß deine Globale "geschwindigkeit" "geschindigkeit", hab's gerändert. ![]() Geht es jetzt schneller? MfG. |
||
![]() |
JamaginBetreff: leistung |
![]() Antworten mit Zitat ![]() |
---|---|---|
@nightphoenix
das hab ich eh schon vorgeschlagen! ![]() Warum 2x Seedrnd Millisecs() *grübel* Und die Kollisionsabfrage kannst auch auf 2 reduzieren! Code: [AUSKLAPPEN] If xball < 50 or xball > xmax - 50 then tod() if yball < 50 or yball > ymax - 50 then tod() lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
Maikson_18 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke für die ganzen antworten ![]() das mit dme flip 0 hat ich schon geändert ich glaub daran lags hatte denn nur noch 4% auslastung und die anderen tipps von euch sind echt klasse ![]() ich werd die mal alle durcharbeiten und in zukunft daran denken ![]() nen dickes danke an alle Mfg Maikson |
||
![]() |
JamaginBetreff: fps und co |
![]() Antworten mit Zitat ![]() |
---|---|---|
bitte! ![]() Immer schön zu helfen! lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
N0X hat Folgendes geschrieben: Also ich weiß nicht ob das eine Verbesserung bringt, aber ich würde Funktionen grundsätzlich nicht in der Hauptschleife schreiben, lieber am Ende vom Code.
ääähm man kann Function ![]() ![]() Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
JamaginBetreff: noch was zu functions.... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich schreibe meine Funktionen in eine eigene Datei und Include dann...
Ist am übersichtlichsten!!! lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
Maikson_18 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das hab ich jetz auch gemacht ^^
hab ich grad ebend hier im forum bei hilfe entdeckt dass das geht |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
du kannst sogar sowas machen
BlitzBasic: [AUSKLAPPEN] Repeat und in der Include dann sowas: BlitzBasic: [AUSKLAPPEN] WaitTimer(Timer) Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group