Problem bei Tilemap Scrolling & Charakter Steuerung
Übersicht

![]() |
eleXityehemals "BlackProgrammer"Betreff: Problem bei Tilemap Scrolling & Charakter Steuerung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten morgen alle miteinander,
Ich schreibe die letzten 3 tage wieder mit BlitzMax und habe auf bb.com einen Link zu dem (wie ich finde super Tile Editor gefunden) Tiled . Da ich diesen sehr interessant fand und ich auch sonnst nichts anderes zu tun hatte dachte ich mir schreibst ne Laderoutine für die maps die mit Tiled erstellt wurden. ![]() Soviel zur Vorgeschichte, jetzt habe ich konkret das Problem das ich eine Figur mit den tasten auf der map umher bewegen möchte, was auch klappt. Aber da die map auch mit scrollt und an den 'kanten' der map dann aufhört bewegt sich die Figur dann schneller wenn die map scrollt und langsamer wenn die map es nicht mehr tut... Ich hoffe es hat jetzt jemand verstanden was ich sagen will, ich habe mal ein Beispiel hoch geladen damit ihr euch ein Bild davon machen könnt ! Link Für hinweise wie ich das lösen könnte wäre ich sehr dankbar hab da entweder grade ne Denkblockade, oder bin einfach zu blöde dafür -.- mfg |
||
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#
Projekt : Worklog |
- Zuletzt bearbeitet von eleXity am Mo, Okt 22, 2012 17:50, insgesamt einmal bearbeitet
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo eleXity
Im Prinzip muss man nur das was man scrollt von der Bewegung des Spielers abziehen. Also wenn du so schnell scrollst wie der Spieler normal läuft, dann bleibt der Spieler auf der Stelle stehen und animiert nur noch. Wenn hingegen nicht gescrollt wird, dann wird auch nichts abgezogen und der Spieler bewegt sich in der normalen Geschwindigkeit. Das mit dem stehen bleiben bezieht sich auf die Bildschirmposition. Relativ zur Karte bewegt er sich nämlich, da man ja die Karte hinten dran herumschiebt. Dadurch kann er während dem Scrollen auch nicht über den Bildschirmrand hinaus laufen, da er ja auf dem Bildschirm stehen bleibt und nur die Karte verschoben wird. Hoffe das hilft dir weiter ![]() |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe das ganze immer ein wenig umständlicher gehandhabt, wie bereits beschrieben.
Grundidee war wie folgt: Die kamera bleibt "fest". Was sich bewegt, sind map + spieler. Hierzu habe ich, je nach map, eine eigene Definition von meter gehabt. Wenns kacheln waren, war eine kachel = 1x1 meter (egal, ob iso oder nicht!) Hierzu gibts dann immernoch die umrechnung von Positions-angabe und bildschirmkoordinate. Heißt, wenn momentan der punkt "0,0" mittig im bild zu sehen ist, war es die oberste linke kachel, die genau mittig zu sehen war. Davon ausgehend konnte man immer eine feine rechnung basteln um offsets zum zeichnen einzufügen. Dabei bezog sich alles auf den nullpunkt der map. Bei dir klingt es eher so, als würde sich die "ansicht" auf den ursprung der map und der spieler auf den ursprung der ansicht beziehen. Beispiel: Mittig ist grade tile 5/3, ein tile hat 32x32 px, Bildschirmbreite ist 1024, höhe ist 768. Zeichenoffset x: -(1024/2) +(5 *32) - (32/2) Zeichenoffset y: -(768/2) + (3* 32) - (32/2) (hoffentlich habe ich nun nicht irgendeinen denkfehler.. erklären wir es lieber fix nochmal: Ich nehme die halbe bildschirmbreite/höhe und ziehe sie von der aktuellen zeichenpositon ab. Darauf rechne ich nun das offset für die breite der kacheln und ziehe nochmal 1/2 kachelbreite ab, um das ganze wirklich mittig zu zentrieren) Wenn du den Offset des Spielers ebenfalls auf eine solche weise errechnest, wird dieser immer auf der passenden "kachel" dargestellt, zumindest in meiner kleiner verkorksten welt ![]() Wichtig ist, das du in diesem fall einen Arrayindex der Map (sprich x / y koordinate der map) als Meter betrachten solltest. Werte von 0.5 / 0.5 als spielerposition dürfte somitg genau mittig auf der kachel 0,0 liegen. 14.5 / 15.5 liegt mittig auf der Kachel 14 / 15. |
||
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, ich habe einen kleinen Code geschrieben, wie ich meine Tileengines verwirkliche.
Vielleicht bringt er dir oder anderen was zur Verdeutlichung: BlitzMax: [AUSKLAPPEN] SuperStrict |
||
![]() |
eleXityehemals "BlackProgrammer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke euch für die antworten, haben mir sehr geholfen, es funktioniert jetzt ![]() schuld war letztendlich die Tatsache die PhillipK erwähnt .. ![]() |
||
nVidia 570GTX | AMD Phenom II X6 | 8 GB RAM | 1TB | Win 7 Ultimate 64 SP1 | B3D, BMAX, BP, C#
Projekt : Worklog |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group