Programmbeschleunigung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

US-Blitz

ehemals "SimssmiS"

Betreff: Programmbeschleunigung

BeitragMo, Jul 19, 2010 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
mein problem ich würde gerne minnigames programieren die auch auf alten pcs laufen bsp bubblecube wers kennt
bereits dieser simple code:
Code: [AUSKLAPPEN]
Graphics 1280,1024,32,3
SetBuffer BackBuffer()
ClsColor 255,255,255
sicht=LoadImage ("Bilder\Sicht.bmp")
char=LoadImage ("Bilder\char.bmp")
Boden=LoadImage ("Bilder\Boden.bmp")
MaskImage sicht,255,255,255
MaskImage char,255,255,255
Levelload$=Input ("Welchen Level willst du Spielen ")
Level=LoadImage ("Bilder\Level\Bilder\"+Levelload+".bmp")
MaskImage Level,255,255,255
x=0
y=-440
Repeat
Cls
If y>=505 Then win=1
If KeyHit(200) And ImagesCollide(char,640,505,0,Level,x,y+40,0)=0 Then y=y+40
If KeyHit(203) And ImagesCollide(char,640,505,0,Level,x+40,y,0)=0 Then x=x+40
If KeyHit(208) And ImagesCollide(char,640,505,0,Level,x,y-40,0)=0 Then y=y-40
If KeyHit(205) And ImagesCollide(char,640,505,0,Level,x-40,y,0)=0 Then x=x-40
DrawImage boden,x+1,y
DrawImage Level,x,y
DrawImage char,640,505
DrawImage sicht,0,1

Flip
Until KeyHit(1) Or win=1
If win=1 Then RuntimeError "You have Won Congratulations" Else RuntimeError "Bye Bye"
End

bereitet probleme wird zb auf links (200) gedrückt wird y erst viel später um 40 erhöht
könnt ihr mir helfen und tipps geben

Xeres

Moderator

BeitragMo, Jul 19, 2010 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ImagesCollide wird saulangsam sein, und dann muss es auch noch 4x mit einem großen(?) Bild ausgeführt werden.
Denk dir ein besseres System aus, mache immer erst simple Näherungen bevor du genau Prüfungen mit rechenintensiven Funktionen machst.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Jul 19, 2010 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If KeyHit(200)
   If ImagesCollide(char,640,505,0,Level,x,y+40,0)=0 Then y=y+40
End If
If KeyHit(203)
   If ImagesCollide(char,640,505,0,Level,x+40,y,0)=0 Then x=x+40
End If
If KeyHit(208)
   If ImagesCollide(char,640,505,0,Level,x,y-40,0)=0 Then y=y-40
End If
If KeyHit(205)
   If ImagesCollide(char,640,505,0,Level,x-40,y,0)=0 Then x=x-40
End If


dieses sollte auch schon wesentlich schneller sein, da Imagecollide nurausgeführt wird wenn die Taste tatsächlich gedrückt wurde!
Denn bei AND wird auche die zweite bearbeitet , egal ob die erste stimmt oder nicht!
[BB2D | BB3D | BB+]

hazumu-kun

BeitragDi, Jul 20, 2010 8:04
Antworten mit Zitat
Benutzer-Profile anzeigen
AND wird optimiert, wenn die erste Bedingung nicht zutrifft wird vorzeitig abgebrochen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Holzchopf

Meisterpacker

BeitragDi, Jul 20, 2010 10:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Das gilt zwar in anderen Programmiersprachen (zB auch BlitzMax), in BlitzBasic ist das aber nicht der Fall, wie folgender kurzer Code demonstriert:
BlitzBasic: [AUSKLAPPEN]
If test()=1 And test()=1 And test()=1
EndIf

WaitKey()

Function test()
Print "test wird ausgeführt"
Return False
End Function


mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

hazumu-kun

BeitragDi, Jul 20, 2010 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, da verwechselte ich das wohl mit Java Sad
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

mpmxyz

BeitragDi, Jul 20, 2010 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Seid doch mal ehrlich:
An den von euch angesprochenen Punkten wird es eher nicht liegen, da es keine hohen Objektzahlen gibt. (Es gibt noch nicht einmal Objekte!)
Ich denke, dass es eher daran liegt, dass das Programm zu schnell läuft und gebremst werden sollte:
BlitzBasic: [AUSKLAPPEN]
Local timer%=CreateTimer(60)
Repeat
...
WaitTimer timer
Flip 0 ;Die 0 ist wichtig!
Until ...

Warum das Flip ohne die 0 aber nicht 'bremst', weiß ich aber auch nicht.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

US-Blitz

ehemals "SimssmiS"

BeitragDi, Jul 20, 2010 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
leider ist bremsen keine lösung nutze seit heute auch fps anzeigen leider kann ichs am alten pc nicht testen da dieser nicht hier ist auf jeden fall auch ein anderes spiel was ich schon auf 60 fps gebremst hatte lief nicht
vlt liegts auch nicht am spiel sondern an der hardware denn das spiel selber lief flüssig also die bewegung etc doch tastatureingaben wurden erst sekunden später erkannt und ausgeführt

Xeres

Moderator

BeitragMi, Jul 21, 2010 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
@mpmxyz: Das Programm läuft zu schnell, und darum wird der Tastendruck später ausgeführt? Wo ist da die Logik? Shocked
Aber ja: Timer + Flip(0) ist immer ein guter Hinweis. Trotzdem halte ich das Bildschirmfüllende Bild als Level für das Problem.

Testen ob die Tastatur mit einem simplen Blitz-Programm ohne Verzögerung Arbeitet.
Super wären auch ausführlichere Erklärungen als "lief nicht", vorteilhafter weise mit Satzzeichen, sonst wird's mir persönlich zu schwer dir zu helfen, US-Blitz.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group