Frage von maijonix, 24

Kollision mit arrays testen?

Ich habe wände erstellt und diese werden unterschieden in 4 kategorien und zwar in den bildern. die nichts wand, die helle busch wand, die dunkle busch wand und die stein wand.

es gibt ein geschoss welches mit den buschwänden und dem stein kolidieren muss mit der nichts wand aber nicht, da sie quasi unsichbar sein soll.

WARUM...? die nichts wand um ein spielfeld zu erstellen mit NIE gleichen wegen welche durch zufaöö mit den wänden besetzt werden

Antwort
von PWolff, 15

Wo ist jetzt das Problem? Kannst du nciht testen, welche Art von Wand jeweils vorliegt?

Kommentar von maijonix ,

Ich hab einfach keine Ahnung wie sie Programmteile aussieht denn das Array ist ein string welches 104 Zufallszahlen ermittelt und so die Bilder für die picture boxen auswählt die die auserwählten zahlen in den Pfad einfügt. Die picture boxen wo die Bilder rein geladen werden sind alle an definierter stelle und bekommen dann das bild mit dem Pfad mit der Zufallszahl geladen. Kann ich da nicht irgendwie abfragen auf kollision nur mit 3 von 4 Wänden anstatt alle?

Kommentar von PWolff ,

Eine Möglichkeit (die ein ganz klein wenig schnellere) ist, das Array auf 4 Arrays aufzuteilen (nach Art).

Die Möglichkeit, die ich hier im Sinn hatte, war etwa so:

  function IstKollision(geschoss as clsGegenstand, wandstück as clsWandstück) as boolean
'durchgängige Wandstücke aussparen
select case wandstück.art'(ein einfaches "if" tut's jetzt auch, aber dies ist eine Vorbereitung auf spätere Erweiterungen für andere Arten durchgängiger Wand (Nebel, Geist, Fata Morgana, ... - meine Erfahrung sagt, dass so was irgendwann kommt)
case enuWandstückArt.nichts
return false
end select'wandstück.art

'die normale Kollisionslogik folgt hier
end function
Kommentar von PWolff ,


(Und zwei Minuten später würde ich - aufgrund meiner Erfahrung mit späteren Erweiterungen die Funktion umbauen und als Methode von clsGegenstand nehmen, und auch sonst clsGegenstand erweitern:

public mustinherit class clsGegenstand
...
public mustinherit readonly property IstDurchlässig as boolean

public function KollidiertMit(other as clsGegenstand) as boolean
if me.istdurchlässig then return false
if other.istdurchlässig then return false

'die normale Kollisionslogik folgt hier
end function'KollidiertMit(other as clsGegenstand)

end class'clsGegenstand

, und clsWandstück sowie clsGeschoss erweitern:

public class clsWandstück
inherits clsGegenstand

...

public overrides readonly property IstDurchlässig() as boolean
Get
select case me.art'(ein einfaches "if" tut's jetzt auch, aber dies ist eine Vorbereitung auf spätere Erweiterungen für andere Arten durchgängiger Wand (Nebel, Geist, Fata Morgana, ... - meine Erfahrung sagt, dass so was irgendwann kommt)
case enuWandstückArt.nichts
return false
end select'me.art
End Get
End Property

...

end class 'clsWandstück



public class clsGeschoss
inherits clsGegenstand

...

public overrides readonly property IstDurchlässig() as boolean
Get
return false
End Get
End Property

...

end class'clsGeschoss


)

Sie kennen die Antwort?

Fragen Sie die Community