Kollisionsabfragen und CPU-Verbrauch

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Delle
Beiträge: 1132
Registriert: 10.05.2005 22:48

Kollisionsabfragen und CPU-Verbrauch

Beitrag 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.
Zuletzt geändert von Delle am 22.07.2010 01:32, insgesamt 2-mal geändert.
PB 6.21 | Win 11
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kollisionsabfragen und CPU-Verbrauch

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Delle
Beiträge: 1132
Registriert: 10.05.2005 22:48

Re: Kollisionsabfragen und CPU-Verbrauch

Beitrag 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)
PB 6.21 | Win 11
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Kollisionsabfragen und CPU-Verbrauch

Beitrag von NicTheQuick »

Genau.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kollisionsabfragen und CPU-Verbrauch

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: Kollisionsabfragen und CPU-Verbrauch

Beitrag von Josef Sniatecki »

Hier verweise ich noch auf einen älteren Beitrag von mir: AND, OR, XOR
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
Delle
Beiträge: 1132
Registriert: 10.05.2005 22:48

Re: Kollisionsabfragen und CPU-Verbrauch

Beitrag 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
PB 6.21 | Win 11
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Kollisionsabfragen und CPU-Verbrauch

Beitrag 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:
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Kollisionsabfragen und CPU-Verbrauch

Beitrag von 7x7 »

Ich lese in der Überschrift jedesmal versehentlich: "Koalitionsfragen und CDU-Verbrauch" :mrgreen:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Koalitionsfragen und CDU-Verbrauch

Beitrag von bobobo »

ich auch :)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten