50 % Auslasstung bei Jump and Run
Übersicht

LarsBetreff: 50 % Auslasstung bei Jump and Run |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey Allerseits!
Ich programmiere gerade ein Jump and Run spiel. Die Ausslastung ist immer auf 50 %. Ich habe einen dualcore prozessor a 2,66 Gz pro Kern. Ich weiß das BB3D nur einen davon ansprechen kann, aber trotzdem finde ich 50% etwas extrem. Ich habe mir auch schon Tuturial "Hurra 100% Auslasstung" und ein par andere Beiträge durchgelesen, aber irgendwie löst das nicht mein Problem. Hier ist der Code: Code: [AUSKLAPPEN] Global timer = CreateTimer (60)
Graphics 270, 400,0,2 SetBuffer BackBuffer() ;variabeln Dim box(1) Dim boxx(1,5) Dim boxy(1,5) Dim hohe (20,2) Dim wx(xmeng) Dim wy(ymeng) Dim mapx%(220) Dim mapy%(108) Dim map%(xmeng,ymeng) Global figur Global figurx = 175 Global figury = -100 Global collision Global background1 Global speed# Global blub Global nullv = -250 Global nullvoy = -400 Global border1 Global font1 Global style1 Global game Global wert% Const ymeng = 1200 Const xmeng = 440 boxx (1,1) =175 boxy (1,1) =-100 boxx (1,2) =175 boxy (1,2) =270 boxx (1,3) =175 boxy (1,3) =170 boxx (1,4) =160 boxy (1,4) =100 ;laden box(1) = LoadImage ("media/box1.bmp") figur = LoadImage ("media/figur.bmp") background1 = LoadImage ("media/background1.bmp") border1= LoadImage ("media/border1.bmp") font1 = LoadFont ("Arial",18,1) ;consruieren While Not KeyHit(1) startf() While Not game = 1 menuef() Flip Wend startf() zufallf() ;hauptschleife While Not KeyHit(1) spielf() WaitTimer timer Flip Wend Wend End Function menuef() menuezeichnenf() If KeyHit(59) Then game=1 If KeyHit(1) Then End End Function Function menuezeichnenf() TileBlock background1 DrawImage border1,0,-400 SetFont font1 Color 0,0,0 Text 5,-400, "Rekord: " + nullvoy/16 Text 5,-300, "Spielen = F1" End Function Function startf() Cls figurx = 175 figury = -135 collision = 0 speed# = 7 blub = 0 nullv = -250 nullvoy =400 game = 0 Origin 0,400 For gx=0 To xmeng Step 44 For gy=0 To ymeng Step 1 map%(gx,gy) = 0 Next Next End Function Function spielf() collisionf() bewegungf() jumpf() nullpunktf() seitenf() zeichnenf() End Function Function collisionf() figurxc1=figurx figuryc1=figury+37 figurxc2=figurx+26 figuryc2=figury+37 rgb1 = ReadPixel(figurxc1, figuryc1) rgb2 = ReadPixel(figurxc2, figuryc2) g1 = (rgb1 And $FF00) / $100 g2 = (rgb2 And $FF00) / $100 r1 = (rgb1 And $FF0000) / $100 r2 = (rgb2 And $FF0000) / $100 b1 = (rgb1 And $FF) / $100 b2 = (rgb2 And $FF) / $100 If g1 > 240 And r1 < 10 And b1 < 10 Then collision = 1 If g2 > 240 And r2 < 10 And b2 < 10 Then collision = 1 End Function Function bewegungf() If KeyDown(203) Then figurx=figurx-2 If KeyDown(205) Then figurx=figurx+2 Cls End Function Function jumpf() If collision = 1 speed=5 blub=1 EndIf If blub=1 ge#=0.1 figury=figury-speed speed=speed - ge# collision = 0 If speed <= -2.5 Then speed = -2.5 EndIf End Function Function nullpunktf() If figury <= nullv And figury>=nullv-100 nullv=nullv-1 nullvoy=nullvoy+1 Origin 0,nullvoy EndIf If figury <= nullv-100 nullv=nullv-3 nullvoy=nullvoy+3 Origin 0,nullvoy EndIf End Function Function seitenf() If figurx > 280 Then figurx= -9 If figurx < -10 Then figurx= 279 End Function Function zeichnenf() TileBlock background1 DrawImage box(1),boxx(1,1),boxy(1,1) DrawImage border1,0,-nullvoy SetFont font1 Color 0,0,0 Text 5,-nullvoy, "Höhe: " + nullvoy/16 For gx=0 To xmeng Step 44 For gy=0 To ymeng If map%(gx,gy) = 1 Then DrawImage box(1), gx, gy*(-1) Next Next DrawImage figur,figurx,figury End Function Function zufallf() gy=0 a=0 Repeat a=0 x=0 SeedRnd MilliSecs()+gy For a=0 To 5 zwy = Rnd(0,9) zwx = Rnd(0,5) y=gy+zwy*12 x=zwx*44 map%(x,y)=1 Next gy=gy+109 Until gy>=1090 End Function Ich hoffe auf Hilfe! LG Lars |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es wird höchstwahrscheinlich am Flip![]() Der Grund dafür steht etwas weiter unten in dem "Hurra 100% Auslastung"-Thread. (Das Warten auf den Bildschirm funktioniert nicht optimal.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Lars |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn ich flip 0 mache dann klappt das spiel nicht mehr richtig! | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Davon abgesehen ist deine Programmstruktur undurchsichtig.
Du benutzt mehr als eine Hauptschleife (bzw. verschachtelte), in startf() steht als erstes CLS ![]() Die Funktion bewegungf() steht nochmal CLS - was darin wohl gar nichts verloren haben dürfte. Was da wie in welcher Reihenfolge abläuft ist mir nicht klar, du verwendest Kurze, immer weiter verschachtelte Funktionen mit relativ Aussagelosen Namen und Variablen; blub würde ich niemals verwenden... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich finds gar nicht so schlecht....
Der Code sieht unschön aus (rein optisch), ist aber im Grunde gut aufgebaut. Damit es auch andere lesen können, würde ich an deiner Stelle mal folgendes machen: 1. Die Constanten kommen ganz nach oben. Sonst muss man zum Verständnis der Zeile BlitzMax: [AUSKLAPPEN] Dim wx(xmeng) erst auf die Suche gehen... 2. auch bei den While/Wend-Schleien schön einrücken. Und die Ifs einrücken... 3. zwischen den Funktionen kannst du 3 Leerzeilen machen, aber die Leerzeilen in den Funktionen stören doch sehr. Ebenso in den If-Abfragen. Hier mal der Vergleich : Code: [AUSKLAPPEN] Function bewegungf() If KeyDown(203) Then figurx=figurx-2 If KeyDown(205) Then figurx=figurx+2 Cls End Function Function jumpf() If collision = 1 speed=5 blub=1 EndIf If blub=1 ge#=0.1 figury=figury-speed speed=speed - ge# collision = 0 If speed <= -2.5 Then speed = -2.5 EndIf End Function Function nullpunktf() If figury <= nullv And figury>=nullv-100 nullv=nullv-1 nullvoy=nullvoy+1 Origin 0,nullvoy EndIf If figury <= nullv-100 nullv=nullv-3 nullvoy=nullvoy+3 Origin 0,nullvoy EndIf End Function wird so zu : BlitzMax: [AUSKLAPPEN]
So kann dir jeder helfen.... Performance-Probleme: Den Perfomance-Problemen kommst du am besten mit einigen Messpunkten auf die Schliche: BlitzMax: [AUSKLAPPEN] Function spielf() Schreib mal, was dabei rauskommt.... |
||
Lars |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Z1 und Z2 wechseln blitzschnell zwischen 0 und 1 | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich brauch schon alle zahlen bis Z6! | ||
Lars |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh ja tschuldigung war mir nicht aufgefallen weil ab Z2 alle aus dem bildausschnitt gingen.
Z1-Z5=0-1 und Z6=3-4 Liegt also an der letzten function (zeichnen) Allerdings habe ich auch mal nur das menü seperat durchlaufen lassen und das zieht auch 50%. |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja, das menü zieht mehr, weil es ohne TIMER zu schnell läuft
probier mal, was besser kommt: BlitzMax: [AUSKLAPPEN] While Not game = 1 oder... BlitzMax: [AUSKLAPPEN] While Not game = 1 In jede Schleife mit einem FLIP gehört immer ein Rücksprung ans Betriebsystem mittels DELAY oder WAITTIMER. die 3 msec in der Hauptschleife sind erstmal OK so. Da lohnt sich noch keine Optimierung. Obwohl da schon Potential wäre. Die Grundsatzfrage lautet: Muss der Bildschirm so oft neu aufgebaut werden? Ich schau mir den Code heute Nacht mal an und zeig Dir da ein paar Stellen auf, wo und wie man "sparen" könnte. BlitzMax oder BB? Sag, mal... du hast den Code im Forum bei BlitzMax reingestellt. Gehört der nicht eigentlich bei BB rein? Da ist eine Zeile SetBuffer BackBuffer() in deinem Code?!? Und die DIMs??? Ja, das ist BB! Performance-Verbesserung Also mit den "Delay 15"-Zeilen komme ich ihm Menü nur noch auf unter 5% Auslastung und im Spiel auf 35%: BlitzBasic: [AUSKLAPPEN] While Not KeyHit(1) Schon ein erster Schritt... Um die Performance auch im Spiel zu reduzieren, füge ich eine GLOBALE Variable Action% ein, die immer dort auf TRUE gesetzt wird, wo sich was verändert: BlitzBasic: [AUSKLAPPEN] Function startf() BlitzBasic: [AUSKLAPPEN] Function bewegungf() BlitzBasic: [AUSKLAPPEN] Function jumpf() Aus diese Variable Aktion% lies die Funktion SpielF() ab, ob sie was zeichnen muss: BlitzBasic: [AUSKLAPPEN] Function spielf() Dadurch wird nur noch dann etwas gezeichnet, wenn sich der Bildschirm geändert hat. Am Ende wird die Action% auf 0 zurückgesetzt. Das einzige CLS, das bei mir überlebt, wandert übrigens in die Zeichenroutine: BlitzBasic: [AUSKLAPPEN] Function zeichnenf() Übrig bleibt eine Belastung von unter 5% |
||
Lars |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Cool das ist ja super! Danke! | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group