kollisionsabfrage auf mapeditor.de.vu - map

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

hc_tom

Betreff: kollisionsabfrage auf mapeditor.de.vu - map

BeitragDi, Nov 08, 2005 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

ich habe ne simple map mit einem 32*32 tileset erstellt. die karte ist 640*480 pixel groß und die tile-layer demzufolge 20*15 tiles. lediglich die unterste reihe ist mit einem tile gefüllt.

als spielfigur habe ich ein 32*32 rechteck (als image) , handle ist auf die mitte des bildes gesetzt

die kollision wollte ich folgendermaßen realisieren, ich prüfe mit
Code: [AUSKLAPPEN]
coll=layer_map_collision (layer.layer, spritex, spritey, sprite [,spriteframe])

ob der spieler irgendwo auf der map kollidiert, sollte das der fall sein, prüfe ich mittels tile-koordinaten, ob der spieler von diversen tiles umgeben ist, in deren richtung er sich dann nicht mehr weiterbegben kann. jedoch gibt es da einige probleme.

erstens, die übeprüfung der umgebenden tiles mache ich mit hilfe des tile wertes (1 = frame, 2=animation, 0 = void)
Code: [AUSKLAPPEN]
 code=layer_getcode (layer.layer, x, y)


obwohl ich mich auf, o.g. map direkt über der gefüllten zeile befinde, zeigt er mir für das vom spieler linke tile, den code-wert 1, an obwohl es laut editor leer ist (auch nicht mit einem transparentem tile gefüllt oder so, einfach nie benutzt; selbes gilt auch für das rechtere tile)

falls es noch bessere kollisionsabfragen gibt und meine möglichkeit unpraktiael ist, wäre es nett, mir bessere ansätze zu unterbreiten Wink danke

unteres beispiel beinhaltet lediglich dieses code-wert problem.

BlitzBasic: [AUSKLAPPEN]

Global screen_width=640
Global screen_height=480

Graphics screen_width,screen_height,16,2

Include \"mapengine/mapengine.bb\"
Include \"inc/inc_scancodes.bb\"

SetBuffer BackBuffer()

Global player_x = 10
Global player_y = 30
Global player_dy = 2
Global player_dx = 2

img_player = LoadImage(\"img/player.bmp\")
MaskImage img_player,255,0,255
MidHandle img_player

error=map_load(\"map/test.map\",\"\")
map.layer=layer_find (\"Map\")

If error>0 Then End


MoveMouse screen_width/2,screen_height/2


Repeat

value=layer_map_coord (map.layer, player_x, player_y,0)
coll=layer_map_collision (map.layer, player_x, player_y, img_player)

code_right = layer_getcode (map.layer, layer_x + 1, layer_y)
code_left = layer_getcode (map.layer, layer_x - 1, layer_y)
code_top = layer_getcode (map.layer, layer_x, layer_y - 1)
code_down = layer_getcode (map.layer, layer_x, layer_y+1)


If KeyDown(KeyArrowUp) = 1 Then
player_y = player_y - player_dy
EndIf

If KeyDown(KeyArrowDown) = 1 Then
player_y = player_y + player_dy
EndIf

If KeyDown(KeyArrowLeft) = 1 Then
player_x = player_x - player_dx
EndIf

If KeyDown(KeyArrowRight) = 1 Then
player_x = player_x + player_dx
EndIf



mx = MouseX()
my = MouseY()
MoveMouse screen_width/2, screen_height/2

map_scrollx = map_scrollx - (mx-screen_width/2)
map_scrolly = map_scrolly - (my-screen_height/2)

Cls

tile_animate()
map_draw()
DrawImage img_player, player_x, player_y

Text 0,0,\"X:\"+Str$(map_scrollx)+\" Y:\"+Str$(map_scrolly)
Text 0,20,\"TileX:\"+Str$(layer_x)+\" TileY:\"+Str$(layer_y)
Text 0,40,\"CodeTop:\"+Str$(code_top)+\" CodeDown:\"+Str$(code_down)
Text 0,60,\"CodeLeft:\"+Str$(code_left)+\" CodeRight:\"+Str$(code_right)

Flip
Until KeyHit(Escape)

End




edit ich habe mal einen fall-algorithmus eingebaut, beispiel unten. nur wenn ich als grenzwert den wert 450 nehme, hört er auf zu fallen, bei anderen werten fällt er einfach weiter.
ich komme irgendwie mit den tilemaps nicht klar. kann mir jm. auf die sprünge helfen, was für hintergrundwissen mir da noch fehlt ? soll ich anstelle dieses editors lieber auf eine eigene mapengine zurückgreifen, die einfacher konzeptioniert ist ? oder ist die mapengine auch für sehr kleine projekte geeignet ? gibt es überhaupt leute, die damit arbeiten ? im forum ist mir bisher wenig davon bekannt.


BlitzBasic: [AUSKLAPPEN]
  If player_state_fall = 1 Then

player_y = player_y + 2 * player_dy

If player_y (=)>= 450 Then player_state_fall = 0

EndIf


edit2 ohje...letzteres problem behoben ^^ (klammerwerte waren ursprungscode)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group