Kollision Type-Tilemap mit Player Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Br41n5t0rm

Betreff: Kollision Type-Tilemap mit Player Problem

BeitragFr, Feb 02, 2024 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen!

Ich sitze gerade an der Kollision einer Spielfigur mit den Bereichen auf der Tilemap, die nicht begehbar sind. Die "Grenzsteine" will ich sie mal nennen, sind in einem Type, zusammen mit Positionsangaben.

Wenn ich nun die Spielfigur über ImagesCollide (oder aber auch RectCollide und Co., ganz egal, passiert dennoch) auf Kollision mit allen Grenzsteinen prüfe, kollidiert er immer nur mit dem vermutlich ersten oder letzten? Eintrag im Type.

Das lustige ist, in einem anderen Spiel habe ich das ebenso mit Schüssen und Gegnern gemacht, sogar beide in Types, aber da hat die Kollision funktioniert und ich versteh gerade einfach nicht mehr warum, bzw. warum es nur bei einem Stein funktioniert. Ich hab mich durchs Forum gekämpft und auch andere Lösungen verfolgt, die aber allesamt bei mir nicht so wollten, wie ich wollte. Ich werde gerade noch verrückt und habe jetzt schon Angst davor, das es eine winzige Kleinigkeit ist, aber ich sehe es nicht.

Kann mich jemand auf den Pfad der Erleuchtung führen und mir sagen woran das liegt?

Ein Testcode, bei dem es ebenso nicht funktioniert:

Code: [AUSKLAPPEN]

Graphics 1024,768,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()


Global grafx = GraphicsWidth()
Global grafy = GraphicsHeight()

;Bilder laden
Global test = LoadImage("test.png")
Global player = LoadImage("tile.png")

Global px# = grafx / 2
Global py# = grafy / 2

Global collision


;Type für die Grenzsteine
Type stest
   Field x
   Field y
End Type

;Grenzsteine Random verteilen
For a = 1 To 10
   neue.stest = New stest
   neue\x = Rnd(1, grafx)
   neue\y = Rnd(1, grafy)
Next

; Hauptschleife

Repeat
Cls

   For zeichne.stest = Each stest
      DrawImage test, zeichne\x, zeichne\y
   Next


   DrawImage player, px, py


   For kollo.stest = Each stest
      collision = ImagesCollide(player, px, py, 0, test, kollo\x, kollo\y, 0)
   Next

   Text grafx-180, 40, "Kollision: "+collision


keys()

Flip 0

Until KeyHit (1)

End

Function keys()
   ;W
   If KeyDown(17) = True Then
      py = py - 0.1
   EndIf

   ;S
   If KeyDown(31) = True Then
      py = py + 0.1
   EndIf

   ;A
   If KeyDown(30) = True Then
      px = px - 0.1
   EndIf

   ;D
   If KeyDown(32) = True Then
      px = px + 0.1
   EndIf

End Function

Eingeproggt

BeitragFr, Feb 02, 2024 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich freu mich richtig über Aktivität hier Smile und dass ich nach so langer Zeit mal wieder helfen kann.

Also du hast:
Code: [AUSKLAPPEN]
For kollo.stest = Each stest
      collision = ImagesCollide(player, px, py, 0, test, kollo\x, kollo\y, 0)
Next


In dieser Schleife wird 10 mal ImagesCollide ausgeführt.
Aber jedesmal der Wert von "collision" überschrieben. Du hast EINE Variable die 10 mal neu geschrieben wird.
Daher enthält sie nur den LETZTEN Wert.

Du müsstest in der Schleife prüfen ob collision = True und falls es der Fall ist, die "Suche nach collision" beenden, zB mit Exit.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Br41n5t0rm

BeitragSa, Feb 03, 2024 9:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Eingeproggt,

ach du meine Sch..., ich wusste es, ich bin so ein Dulli. Ich hatte schon überlegt mal testweise eine True/False-Variable zu machen, der mir zeigt, ob die Kollision wirklich nie ausgelöst wird, aber hab das aus irgendeinem Grund für Schwachsinn gehalten. Jetzt gehts. Ich flipp hier aus und freu mich zugleich. Danke dir viel vielmals. Ich hab schon gezweifelt, ob es nicht doch allmählich am Alter liegt. Very Happy

Ich bin tatsächlich noch relativ oft im Forum unterwegs und nutze die Hilfeseiten aktiv. Nach wie vor programmiere ich och sehr viel in Blitz, vor allem weil mir die meisten anderen Programmiersprachen einfach nicht gefallen (Ausnahme Python). Blitz hat irgendwas, was mich immer wieder fasziniert. Auch hat es mich VisualBasic verstehen lassen und mir damit in Excel sehr viel geholfen.

Darum freut es mich, das ich dir den Tag versüßen konnte. Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group