kollision mit tiel und draw3d
Übersicht

![]() |
andi79Betreff: kollision mit tiel und draw3d |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo ich bins mall wieder
Ich hab da ein kleines Problem mit tilemap und Kollision abfrage über Dim. Feld Hab mir jetzt die ganzen Beiträge zu Kollision durchgelesen und durch probiert leider ohne erfolg Dort wo er mir Kollisionen anzeigt gibt es keine tiels ich benutze draw3d ich hab mall die Vermutung das es mit der Nullpunkt Verschiebung zu tun hat aber habe keinen Plan wie ich es Lössen soll Hier meine code Code: [AUSKLAPPEN] ;Grafikmodus setzen AppTitle "test" Graphics3D 1024,768,0,2 SetBuffer BackBuffer() Include "includes\Draw3D.bb" Local Timer=CreateTimer(50) Local Camera=CreateCamera() DrawInit3D(Camera) Const TIELX = 128 ;tiel grösse x Const TIELY = 128 ;tiel grösse y Const MAPX = 8 Const MAPY =6 Global hintergrund=loadimage3d("hintergrund.png",1,1,0) Global boden=loadimage3d("boden.png",2,1,0) Global boden2=loadimage3d("boden2.png",2,1,0) Global grass=loadimage3d("grass.png",2,1,0) Global player=LoadImage3D("player.png",2,1,0) Global xposspie=-150;Die x koordinate für den spieler Global yposspie=-234;Die y Koordinate für den spiler Global Font1=LoadFont3D("Fonts\Babylon1.png",2,2) Global Offset_x = 448, Offset_y = 320 Global u Global r Global d Global l Global m ;leveldaten lesen Dim map (MAPY,MAPX) Restore mapdata For y=0 To 5 For x=0 To 7 Read map(x,y) Next Next ;Hauptschleife Repeat hintergrund() DrawMap() spielerbewegen() debug() ;Springen: Dim Sprungweite(18) Restore springen For I=2 To 18 Read Sprungweite(I) Next If KeyDown(57) And Sprung=0 Then ; Sprung Sprung = 1 If map((Offset_x +64) /128,yposspie /128)=1 And sprung = 1 Then sprung = 0 yposspie = yposspie +1 EndIf EndIf If Sprung > 0 Then ; während des Sprungs Sprung = Sprung + 1 If Sprung = 19 Then Sprung = 0 yposspie = yposspie + Sprungweite(Sprung) EndIf If xposspie = 0 Then Offset_x = Offset_x + 5 WaitTimer(Timer) RenderWorld Clear3D() Flip 0 Until KeyHit(1) End ;funktionen Function spielerbewegen() ;prüfen ab spieler mit tils kolosion besteht: u=map((xposspie+64)/128,(yposspie+64)/128) ; Oben / Up r=map((xposspie+64)/128,(yposspie+64)/128) ; Rechts / Right d=map((xposspie+64)/128,(yposspie+64)/128) ; Unten / Down l=map((xposspie+64)/128,(yposspie+64)/128) ; Links / Left If KeyDown(200) And d=0 Then yposspie = yposspie + 4 If KeyDown(208) And u=0 Then yposspie = yposspie - 4 If KeyDown(205) And r=0 Then xposspie = xposspie + 4 If KeyDown(203) And l=0 Then xposspie = xposspie - 4 End Function Function hintergrund() DrawImage3D(hintergrund,0,0,0,0,1) End Function Function DrawMap() For y = 0 To 5 For x = 0 To 7 If map(x,y) = 1 Then DrawImage3d (boden, x*TIELX - Offset_x, y*TIELY - Offset_y,0,0,1) EndIf If map(x,y) = 2 Then DrawImage3d (grass, x*TIELX- Offset_x, y*TIELY - Offset_y,0,0,1) EndIf If map(x,y) = 3 Then DrawImage3d (boden2, x*TIELX - Offset_x, y*TIELY - Offset_y,0,0,1) EndIf Next Next End Function Function debug(); debug If KeyDown(59) Then text3d(Font1,-400,330,"!!!!!!! DEBUG INFO !!!!!!!",0,glow) Text3D(Font1,-400,270,Offset_x + "X Map Pos ",0,Glow) Text3D(Font1,-400,300,yposspie + "Y Spieler ",0,Glow) Text3D(Font1,-400,240,xposspie + "x Spieler",0,Glow) Text3D(Font1,-400,180,d + "UNTEN",0,Glow) Text3D(Font1,-400,210,u + "OBEN",0,Glow) Text3D(Font1,-400,150,r + "RECHTS ",0,Glow) Text3D(Font1,-400,120,l + "LINKS ",0,Glow) End If End Function .springen Data 30,30,30,30,30,20,20,0,0,-20,-20,-30,-30,-30,-30,-30,0 ;level daten .mapdata Data 1,1,1,1,1,0,1,1 Data 0,0,0,0,0,0,0,0 Data 0,0,0,0,1,1,1,0 Data 0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0 Data 0,0,0,0,0,0,0,0 |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich nehme mal an dies sind alle Zeilen, die du derzeit zur Kollision geschrieben hast?
BlitzBasic: [AUSKLAPPEN] u=map((xposspie+64)/128,(yposspie+64)/128) ; Oben / Up Da kann dich schon mal was nicht stimmen, weil ja alle Zeilen gleich sind.... So wie das aussieht, willst du nur wissen, welche Ecke deines SpielerTiles in welcher Ecke der Map steht, oder? BlitzBasic: [AUSKLAPPEN] u=map((xposspie-64)/128,(yposspie-64)/128) ; Links Oben Hier hab ich die Vorzeichen mal geändert. So wären die 4 Testpunkte links/oben, rechts/oben, links/unten und rechts/unten. Also die Ecken deiner Figur. Ist es das, was du suchst? |
||
![]() |
andi79 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Mühe aber es hat leider nichts gebracht zu besseren Verständnis meines Problems habe ich die Dateien hochgeladen mein Problem ist das die Koordinaten irgendwie nicht stimmen dort wo eigentlich nichts ist bleibt die Figur stehen und dort wo was ist ignoriert sei es
http://rapidshare.com/files/36...t.zip.html |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
also 4x das gleiche ist sicherlich falsch. Wo sollen denn deiner Meinung nach die vier Stellen L,O,R,U sein?
ich dachte erst so: Code: [AUSKLAPPEN] L-----O | | | | | | R-----U aber wahrscheinlich meinst du so: Code: [AUSKLAPPEN] +--O--+ | | L R | | +--U--+ Außerdem muss ja der Offset immer abgezogen werden: BlitzBasic: [AUSKLAPPEN] RelativSpielerX = xPosSpie - Offset_X kann aber auch grad anders herum sein: BlitzBasic: [AUSKLAPPEN] RelativSpielerX = xPosSpie + Offset_X oder eine Mischung davon....probier einfach alle 4 Möglichkeiten durch... dann wäre der Code: BlitzBasic: [AUSKLAPPEN] u=map( RelativSpielerX/128 , (RelativSpielerY-64)/128 ) ; Oben Mitte |
||
![]() |
andi79 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok ohne draw3d und offset geht es aber mit funktioniert es nicht ![]() ![]() ![]() |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
DU musst ja auch bedenken das die Y-Achse invertiert ist !
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Toeb
aha! muss ich ihm dann den code irgendwie anpassen? Oder liege ich mit meiner Hilfe hier völlig falsch. Ich glaube ja immer noch, das das Problem genau in diesen Zeilen liegt, oder? @andi79 umgedrehtes Y wäre dann so: BlitzBasic: [AUSKLAPPEN] u=map( RelativSpielerX/128 , (RelativSpielerY+64)/128 ) ; Oben Mitte |
||
![]() |
andi79 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Super es funktioniert endlich ![]() ![]() Code: [AUSKLAPPEN] Function spielerbewegen()
DrawImage3D(player,player_x,player_y,0,0,1) RelativSpielerX = player_x + Offset_x + (TIELX/2) RelativSpielerY = player_y + Offset_y + (TIELY/2) u=map( RelativSpielerX/128 , (RelativSpielerY-64)/128 ) ; Oben Mitte r=map( (RelativSpielerX+64)/128 , RelativSpielerY/128 ) ; Rechts d=map( RelativSpielerX/128 , (RelativSpielerY+64)/128) ; Unten Mitte l=map( (RelativSpielerX-64)/128 , RelativSpielerY/128 ) ; Links If KeyDown(200) And d=0 Then player_y = player_y + 4 If KeyDown(208) And u=0 Then player_y = player_y - 4 If KeyDown(205) And r=0 Then player_x = player_x + 4 If KeyDown(203) And l=0 Then player_x = player_x - 4 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group