Problem mit Tile-Kollision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Flori-D

Betreff: Problem mit Tile-Kollision

BeitragSo, Nov 14, 2004 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe vor sone Art Heißer Draht Spiel zu entwickeln.Level 1 Und sois schon design allerdings hab ich ein Problem.Die Kollsision mit den Mauern da weiß ich einfach nicht wie ichs angehen soll.Bitte helft mir.Hier auch mal stückchen code:

Spiel.bb:

Code: [AUSKLAPPEN]
Dim Level$(16,20)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Levels von Festplatte lesen;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leveldatei = ReadFile("map_1.txt")
For Zeile= 0 To 14
 A$ = ReadLine(leveldatei)
 For Spalte=0 To 19
  B$ = Mid$(A$,Spalte+1,1)
  Level$(Zeile,Spalte) = B$
  Next
Next
CloseFile leveldatei



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Hauptschleife;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Repeat
 Cls
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Menu;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;DrawImage maus,MouseX(),MouseY()
 DrawImage menue_button_1, 250,100
 DrawImage menue_aktiv,aktiv_x,aktiv_y
  If ImagesOverlap(menue_aktiv,aktiv_x,aktiv_y, menue_button_1,250,100)  Then
   If KeyHit(57) Then   
    SetBuffer BackBuffer()
     Repeat
      Cls
       level_1()
    Until KeyHit(1)
   EndIf
  EndIf




Flip
Until KeyHit(1)


level1.bb:

Code: [AUSKLAPPEN]
Function level_1()



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Level zeichnen;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

For Zeile=0 To 14
  For Spalte=0 To 19
   Select Level$(Zeile,Spalte)
    Case "1"
     DrawImageRect tiles, Spalte*32, Zeile*32, 580, 206, 32, 32
    ;Case " "
     ;DrawImageRect tiles, Spalte*32, Zeile*32, 2, 342, 32, 32
   End Select
  Next
 Next

;For I = 0 To 1
 DrawImage player, MouseX(),MouseY()
 ;Flip
 ;Delay 200
;Next

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Spieler bewegung;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  If ImagesOverlap(player,MouseX(),MouseY(),tiles, 1, 1) Then End;was muss ich da machen?




Flip
End Function


Mfg Flori-D
BB is Macht!

Homepage: www.flori-d.de

simi

BeitragSo, Nov 14, 2004 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Du berechnest, in welchem Tile sich die Maus befindet. (MX/16 oder ähnlich)
Dann fragst du ab dieses Tile eine Mauer ist. Wenn Ja, Maus stirbt, wenn nein nichts machen. Wenn jetzt die Tilegrafik kleiner al die Tilegrösse ist, kannst du ja noch mit ImageRectsOverlap abfragen, ob sie kolliedieren....

Flori-D

BeitragSo, Nov 14, 2004 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ungefähr so mit der Berechnung?:

Code: [AUSKLAPPEN]

For X=0 To 20
 For Y=0 To 20
  tile_x = 0
   tile_y = 0
    tile_x = tile_x +32
     tile_y = tile_y +32
      If MouseX() = tile_x Then
       if MouseY() = tile_y Then
        Text 200,200,"Kollision!"
       Endif
     Endif
   Next
Next


Mfg Flori-D
BB is Macht!

Homepage: www.flori-d.de

Flori-D

BeitragDo, Nov 18, 2004 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich ahbs immer noch nicht gecheckt bitte helft mir.


Mfg Flori-D
BB is Macht!

Homepage: www.flori-d.de
 

ke^kx

BeitragDo, Nov 18, 2004 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Probiers mit:
Code: [AUSKLAPPEN]

if Level(MouseX () / 32, MouseY() / ...) = Mauer then;Ich weis jetzt nicht wie viele tiles du jeweils verwendest
text 100, 100 "Kollision"
endif


Mauer musst du natürlich durch die Ziffer des Mauer Tiles ersetzen.

Viel Glück,
Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Flori-D

BeitragSa, Nov 20, 2004 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
THX klappt fast.Ich ahbe jetzt das Problem das manchmal ne Kolli ist wo keine Mauer ist.Oder das ich über ne Mauer gehe und es ist keine Kollision wiso?

Mfg Flori-D
BB is Macht!

Homepage: www.flori-d.de
 

ke^kx

BeitragSa, Nov 20, 2004 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Poste hier mal deinen Code, mit den wichtigsten Teilen. Dann guck ich nochmal.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Flori-D

BeitragSo, Nov 21, 2004 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal der wichtigste Teil:

Code: [AUSKLAPPEN]
Function level_1()



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Level zeichnen;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

For Zeile=0 To 14
  For Spalte=0 To 19
   Select Level$(Zeile,Spalte)
    Case "1"
     DrawImageRect tiles, Spalte*32, Zeile*32, 580, 206, 32, 32
    ;Case " "
     ;DrawImageRect tiles, Spalte*32, Zeile*32, 2, 342, 32, 32
   End Select
  Next
 Next

;For I = 0 To 1
 DrawImage player, MouseX(),MouseY()
 ;Flip
 ;Delay 200
;Next

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Spieler bewegung;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

If Level$(MouseX()/32, MouseY() /32) = 1 Then
 Text 100, 100 "Kollision"
Endif




Flip
End Function
BB is Macht!

Homepage: www.flori-d.de
 

ke^kx

BeitragSo, Nov 21, 2004 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit welcher Auflösung arbeitest du? Wenn du mit 640*480 arbeitest, sollte dein Level (wenn es einen Bildschirm bedecken soll) 20*15 Tiles a 32*32 Pixel groß sein. Dann müsste es funktionieren

Und was soll das:

Zitat:

;For I = 0 To 1
DrawImage player, MouseX(),MouseY()
;Flip
;Delay 200
;Next


Erstens: Warum ist das auskommerntiert?
Zweitens: Wieso die For-Next-Schleife? du hast doch nur einen Player, oder?

Ich hoffe, dass ich dir helfen konnte,
Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Flori-D

BeitragMo, Nov 22, 2004 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja wred das mit de Level probieren thx.Das auskomentierte war mal von nem Playeer der Animiert war.Aber die Animation war zu schnell.Hatte kein Bock das jetzt mit Timern zu beheben.

Mfg Flori-D
BB is Macht!

Homepage: www.flori-d.de

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group