Kollision Type-Tilemap mit Player Problem
Übersicht BlitzBasic Beginners-Corner
Br41n5t0rmBetreff: Kollision Type-Tilemap mit Player Problem |
Fr, Feb 02, 2024 16:19 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Feb 02, 2024 20:04 Antworten mit Zitat |
|
---|---|---|
Hallo,
Ich freu mich richtig über Aktivität hier 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 |
Sa, Feb 03, 2024 9:12 Antworten mit Zitat |
|
---|---|---|
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. 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. |
||
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group