Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Wenn sich zwei Objekte berühren...
Frage
Guten Tag liebe Supportnetlers!
Ich arbeite gerade zusammen mit zwei Freunden an einem Projekt, ein 2D Jump'n'Run Game.
Nun haben wir leider ein Problem, nämlich sobald die Figur (als PictureBox-Control) ein Hinderniss (als Shape-Control) berührt, sollte die Figur nicht mehr weitergehen können.
mfG
breznica :>
Antwort 1 von Proggi
nun - wenn du ein array hast in dem alle (rechteckigen) Shapecontrolls sind, dann kannst du per Schleife die das Array durchlaufen (beim erstellen und auch beim prüfen auf kollision).
wenn du MyShapeArray[4]
als Array hast, die erste Dimension ist die nummer des Shapecontrolls, die 2. die Dimensionen, also
xPos = 1
yPos = 2
xWidth = 3
yHeight = 4
Du kannst beim zeichnen der Shapes das Array durchlaufen zum zeichnen, beim bewegen der Figur must du bevor die figur bewegt wird die neue Position auf kollision prüfen z.b.:
die Ifabfrage bin ich mir noch nicht so ganz sicher - prüfe mal welche Eckpunkte du mit welchen vergleichen must - ich glaub das ist so ok.
wenn du MyShapeArray[4]
als Array hast, die erste Dimension ist die nummer des Shapecontrolls, die 2. die Dimensionen, also
xPos = 1
yPos = 2
xWidth = 3
yHeight = 4
Du kannst beim zeichnen der Shapes das Array durchlaufen zum zeichnen, beim bewegen der Figur must du bevor die figur bewegt wird die neue Position auf kollision prüfen z.b.:
' Statische Variablen zur besseren übersicht was was ist
xPos = 1
yPos = 2
xWidth = 3
yHeight = 4
' fiktive bildgröße (kannst auch direkt vom objekt.width und objekt.height
BildxGroesse = 60;
BildyGroesse = 80;
' fiktive neue Position (kann nicht vom bild abgelesen werden da Bild noch nicht verschoben)
NeuesBildxPos = 44;
NeuesBildyPos = 44;
Collision = false
for MyShape in MyShapeArray
if NeuesBildxPos+BildxGroesse < MyShape[xPos] and NeuesBildxPos > MyShape[xPos]+MyShape[xWidth] then
if NeuesBildyPos+BildyGroesse < MyShape[yPos] and NeuesBildyPos > MyShape[xPos]+MyShape[yWidth] then
Collision = true
exit for
end if
end if
next
if not Collision then
' hier neue Bildposition erst setzten
end ifdie Ifabfrage bin ich mir noch nicht so ganz sicher - prüfe mal welche Eckpunkte du mit welchen vergleichen must - ich glaub das ist so ok.
Antwort 2 von Proggi
sorry für die breite X.x
Arraydimension war zudem falsch, da [ i ] hier in italic umgesetzt wird.
j = anzahl der Shapes
4 = die 4 Maße x,y,breite,höhe
MyShapeArray[j][4]
Arraydimension war zudem falsch, da [ i ] hier in italic umgesetzt wird.
j = anzahl der Shapes
4 = die 4 Maße x,y,breite,höhe
MyShapeArray[j][4]
Antwort 3 von breznica
Vielen Dank Proggi, das Problem hat sich gelöst :]

