Seite 2 von 4
Verfasst: 20.08.2006 09:03
von DarkDragon
@Rockmaster: Das meinten die von Anfang an, nur du hast es nicht verstanden

.
ZeHa, nicht PBZecke.
Verfasst: 20.08.2006 10:11
von #NULL
aber der link ist 1.
ohne code, und 2. eine isometrische umsetzung die nur das grundverständnis erschwert... dennoch, is der link ganz interessant.
<edit:>
wie nennt man eigentlich die perspektive der direkten draufsicht von oben, is doch nich' vogelperspektive, oder?
Verfasst: 20.08.2006 10:30
von DarkDragon
#NULL hat geschrieben:<edit:>
wie nennt man eigentlich die perspektive der direkten draufsicht von oben, is doch nich' vogelperspektive, oder?
Doch.
Verfasst: 20.08.2006 13:25
von Vermilion
*UPS* Tschulligung, ZeHa... ich glaube PBZecke hatte so ein ähnliches Bild

Naja, jedenfalls habe ich in manchen Sachen ein ziemlich schlechtes Gedächtnis..
Verfasst: 31.08.2006 21:06
von Thomas
Wie programmiert man sowas??
Verfasst: 31.08.2006 21:26
von #NULL
das ist ein beispiel wie du eine isometrische map dartellen kannst. die map ist in dem fall ein array, dessen element-werte die entsprechende SpriteID enthalten. die tiles sind hier 32x16 pixel groß:
Code: Alles auswählen
+ = transparente farbe
# = sichtbare farbe
++++++++++++######++++++++++++
+++++++++############+++++++++
++++++##################++++++
+++########################+++
##############################
+++########################+++
++++++##################++++++
+++++++++############+++++++++
++++++++++++######++++++++++++
++++++++++++++++++++++++++++++
Code: Alles auswählen
Procedure drawMap()
For k=0 To mapHeight-1
For i=0 To mapWidth-1
xPos=xOff+i*16-k*16
yPos=yOff+i*8+k*8
DisplayTransparentSprite(map1(i,k), xPos, yPos )
If mouseX > xPos And mouseX < 32+xPos And mouseY > yPos And mouseY < 16+yPos
If SpritePixelCollision( courserPixel,mouseX,mouseY, shape1Sprite,xPos,yPos )
DisplayTransparentSprite(frameSprite,xPos,yPos )
EndIf
EndIf
Next
Next
EndProcedure
hier ist auch eine prüfung enthalten, über welchem tile sich die maus befindet (z.b. um das entsprechende tile hervorzuheben).
Verfasst: 31.08.2006 22:06
von Kaeru Gaman
ich würde solche map-collisionen aber keinesfalls mit den collisions-routinen machen.
eine mathematische lösung ist immer performanter.
bei ner sprite-pixel kollision schläft man doch ein.
Verfasst: 31.08.2006 22:55
von #NULL
in dem fall kann ich mir nicht vorstellen, dass es so schlimm wäre:
das erste sprite ist 1x1 pixel groß, das zweit 32x16, und die koll.-prüfung findet in der proc nur 4 mal für die ganze map statt.
..aber du kannst ja gerne mal zeigen wie du mit geometrie/mathe das tile unter der maus ermitteln würdest.

Verfasst: 31.08.2006 23:03
von Zaphod
Am leichtesten geht das mit einer Tabelle. Die tabelle hat die selbe größe wie die Maptiles. Man stellt erst grob fest über welchen Sprites die maus sein könnte über division mit der tilegröße und in der tabelle kann man dann leicht nachschlagen über welchem tile sich die maus befindet. Ist aber auch mit der Pixelperfekten Kollision möglich, weil man ja nicht alle tiles überprüfen muß, sondern nur die in der nähe der tiles.
Es gibt in einigen tutorials auch rein mathematische lösungen, diese sind natürlich am elegantesten, aber da muß man sehr auf rundungsfehler achten.
Ich hab da mal was gemacht. Wenn bedarf besteht kann ich mal schauen ob ich noch die Quellcodes habe. War aber ziemlich schmutzig zusammengefrickelt...
Verfasst: 01.09.2006 09:21
von Kaeru Gaman
@Null
5x für die ganze Map, aber du hast recht, das hab ich in der eile übersehen.
ok, wenn schon collision, dann ist das so die beste lösung.
...mir stellen sich nur bei collision und tilemap im allgemeinen die haare auf,
weil ich da schon so viel grausige sachen gesehen habe...
die von zaphod vorgeschlagene lösung könnte man bei dir direkt einbaun.
einfach ein array erstellen, das exakt so aussieht, wie dein tile-demo-text.
da wo du das SpritePixelCollision stehen hast, einfach
das könnte sogar die aller performanteste lösung sein,
noch schneller als komplizierte mathematik.