und wieder die Kollision....
Übersicht

![]() |
FreemanBetreff: und wieder die Kollision.... |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hatte meine kolli so gut wie fertig, aba es gan immer wieder stellen bei der sie nicht so wirkungsvoll war (wo ein teil für eine ecke genommen wurde)
so hab ich den alles mit rects umrundet und dann ne kollision gemacht, hat auch wunderbar geklappt, nur war dann die fps rate sehr niedrich weil man auch alle rects abfragen muss....naja, so hab ich mir gedacht meinen Helden mit nem rect zu umranden und dann einfach mit imagerectcollide weiterzumachen und da ich ja tilesets nehme sollte das dann ja auch wunderbar funktionieren....naja, dachte ich zumindest .... ich hatte mir dann ne kleine minimap gemacht und es da mal ausprobiert, aba es hat nicht geklappt, http://mitglied.lycos.de/freeman1111/new bitte schauT mal was da falsch ist ps: der block soll mit dem frame 0 (also Rand ) kollidieren. Danke [/url] |
||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kollision mit Tiels kann man mathematisch überprüfen, ist wesentlich schneller und meist nicht so buganfällig:
Code: [AUSKLAPPEN] oben=map((sx+16)/32,(sy-2)/32) ; Oben
Ich hab das nur mal eben aus dem letzten Projekt rauskopiert. Das Beispiel geht von Tilegröße 32*32 Pixel und Spielfigurgröße 32*32 Pixel aus. Wenn andere Größen verwendet werden sollte es ja leicht anzupassen sein. zurückgegeben wird die Nummer des Tiles die sich rund um den Spieler befinden.
rechts=map((sx+32)/32,(sy+16)/32) ; Rechts unten=map((sx+16)/32,(sy+32)/32) ; Unten links=map(sx/32,(sy+16)/32) ; Links mitte=map((sx+16)/32,(sy+16)/32) ; Mitte |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Freeman |
![]() Antworten mit Zitat ![]() |
---|---|---|
genauso hat ich s davor auch, hat auch ganz gut geklappt, aba es gab stellen wo diese rechnung nicht gecklappt hat! | ||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann ich mir nicht vorstellen. Sicher das der Fehler nicht woanders lag? | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Freeman |
![]() Antworten mit Zitat ![]() |
---|---|---|
ne, es war alles richtig....nur ebn die Kanten. waren nich das ware, deshalb wärs mir lieb wenn du mal in die datei schaun könntest die ich im ersten post gelinked hab ![]() |
||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du prüfst hier:
Code: [AUSKLAPPEN] If ImageRectCollide(tile,x,y,0,hx,hy,32,32) Then End
nur auf die koordinaten x=9 und y=9, da du vorher:
Code: [AUSKLAPPEN] For y = 0 To 9
das hier machst.
For x = 0 To 9 DrawImage tile,x*32,y*32,map(x,y) Next : Next D.h. deine kollision kann nur oben links im eck funzen. Schau dir imagerectcollide in der Hilfe nommal an- Du musst spezifische Koords angeben. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab mir erlaubt Deinen Code etwas zu verändern:Code: [AUSKLAPPEN] Graphics 640,480,32,2
So sollte das funzen SetBuffer BackBuffer() tile = LoadAnimImage("kolli.PNG",32,32,0,2) player = LoadAnimImage("kolli.PNG",32,32,0,3) hx = 100 hy = 100 Dim map(10,10) Data 0,0,0,0,0,0,0,0,0,0 Data 0,1,1,1,1,1,1,1,1,0 Data 0,1,1,1,1,1,1,1,1,0 Data 0,1,1,1,1,1,1,1,1,0 Data 0,1,1,1,1,1,1,1,1,0 Data 0,1,1,1,1,1,1,1,1,0 Data 0,1,1,1,1,1,1,1,1,0 Data 0,1,1,1,1,1,1,1,1,0 Data 0,1,1,1,1,1,1,1,1,0 Data 0,0,0,0,0,0,0,0,0,0 For y = 0 To 9 For x = 0 To 9 Read map(x,y) Next : Next While Not KeyDown(1) Cls rx = hx ry = hy For y = 0 To 9 For x = 0 To 9 DrawImage tile,x*32,y*32,map(x,y) If map(x,y)=0 If RectsOverlap(x*32,y*32,32,32,hx,hy,32,32) Then Text 10,400,"Kolli" ; Geändert EndIf Next : Next If KeyDown(200) Then hy = hy - 1 If KeyDown(203) Then hx = hx - 1 If KeyDown(205) Then hx = hx + 1 If KeyDown(208) Then hy = hy + 1 DrawImage player,hx,hy,2 Rect rx,ry,32,32,0 Text 0,0,hx Text 0,15,hy Text 0,30,"rx" + Str(rx) Text 0,45,"ry" + Str(ry) Flip Wend ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Freeman |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke, jetz weis ich endlich wie!! dankeschöööööön ![]() FreeMan |
||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group