Seite 1 von 2

Kollisionsabfragen und CPU-Verbrauch

Verfasst: 16.07.2010 19:25
von Delle
Hallo,

welche Prüfung ist CPU-schonender?

Code: Alles auswählen

If MouseButton(1) And SpriteCollision(#Sprite_Fadenkreuz,MouseX(),MouseY(),#Sprite_Feind,Feinde()\x,Feinde()\y)

; ...

EndIf
oder

Code: Alles auswählen

If MouseButton(1)
       
If SpriteCollision(#Sprite_Fadenkreuz,MouseX(),MouseY(),#Sprite_Feind,Feinde()\x,Feinde()\y)

; ...

EndIf
     
EndIf
Was meint ihr? Ich tippe mal auf die 2. Variante.

Re: Kollisionsabfragen und CPU-Verbrauch

Verfasst: 16.07.2010 19:32
von STARGÅTE
schau dir mal das hier an:

Code: Alles auswählen

Null = 0
If Null And MessageRequester("", "Ich komme nicht dran")

EndIf
Wenn in einem AND bereits der erste Ausdrück Falsch ergibt, wird die Abbfrage sofort beendet.

Somit kannst du auch bei dir die 1. Variante nehmen, welche dann sogar schneller ist, weil kein 2. IF block erzeugt werden muss.

Re: Kollisionsabfragen und CPU-Verbrauch

Verfasst: 16.07.2010 22:24
von Delle
Danke für die Info!

Also am Besten man fragt zuerst das ab, was vermutlich eh nicht zutrifft?

Also eher so

If MouseButton(1) And SpriteCollision(#Sprite_Fadenkreuz,MouseX(),MouseY(),#Sprite_Feind,Feinde()\x,Feinde()\y)

als

If SpriteCollision(#Sprite_Fadenkreuz,MouseX(),MouseY(),#Sprite_Feind,Feinde()\x,Feinde()\y) And MouseButton(1)

Re: Kollisionsabfragen und CPU-Verbrauch

Verfasst: 16.07.2010 22:47
von NicTheQuick
Genau.

Re: Kollisionsabfragen und CPU-Verbrauch

Verfasst: 16.07.2010 22:58
von STARGÅTE
Umgekehrtes gilt im übrigen bei OR

Dort am Anfang immer das hinstellen was in den meisten fällen Wahr ergibt, weil bei OR beim ersten Wahr auch abgebrochen wird.

Re: Kollisionsabfragen und CPU-Verbrauch

Verfasst: 17.07.2010 21:21
von Josef Sniatecki
Hier verweise ich noch auf einen älteren Beitrag von mir: AND, OR, XOR

Re: Kollisionsabfragen und CPU-Verbrauch

Verfasst: 19.07.2010 20:23
von Delle
So und noch eine kleiner Optimierungsfrage...

Im Spiel wird ja an einer bestimmten Stelle immer überprüft ob eine Kollision (Abschuss) stattgefunden hat.

Das hab ich bisher immer so benutzt:

Code: Alles auswählen

ForEach Feinde()

If MouseButton(1) And SpritePixelCollision()
; Feind löschen, Punkte erhöhen
EndIf

Next
Das läuft natürlich alle sichtbaren Feinde durch...

Wäre es nicht sinnvoller erstmal zu checken ob überhaupt die Maus gedrückt wurde? Und dann erst welcher Feind "tot" ist?

Code: Alles auswählen

If MouseButton(1)

ForEach Feinde()
     
If SpritePixelCollision()
; Feind löschen, Punkte erhöhen
EndIf
          
Next

EndIf

Re: Kollisionsabfragen und CPU-Verbrauch

Verfasst: 20.07.2010 13:42
von NicTheQuick
Ja, das ist sinnvoller.

Fehlt dir wirklich noch so das Gespür dafür, dass du selbst diese hier bestätigt brauchst? :wink:

Versuche deiner Intuition da mehr zu vertrauen. :wink:

Re: Kollisionsabfragen und CPU-Verbrauch

Verfasst: 20.07.2010 14:50
von 7x7
Ich lese in der Überschrift jedesmal versehentlich: "Koalitionsfragen und CDU-Verbrauch" :mrgreen:

Re: Koalitionsfragen und CDU-Verbrauch

Verfasst: 20.07.2010 15:35
von bobobo
ich auch :)