und wieder die Kollision....

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Freeman

Betreff: und wieder die Kollision....

BeitragSa, Mai 29, 2004 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 29, 2004 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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
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
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.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Freeman

BeitragSa, Mai 29, 2004 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 29, 2004 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 29, 2004 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

BladeRunner

Moderator

BeitragSa, Mai 29, 2004 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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
   For x = 0 To 9
   DrawImage tile,x*32,y*32,map(x,y)
   Next : Next
das hier machst.
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

BeitragSa, Mai 29, 2004 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mir erlaubt Deinen Code etwas zu verändern:Code: [AUSKLAPPEN]
Graphics 640,480,32,2
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
So sollte das funzen Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Freeman

BeitragSa, Mai 29, 2004 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, jetz weis ich endlich wie!! dankeschöööööön Wink



FreeMan
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group