Es geht bei der "Pufferzone" um folgendes:
Während ein Event nur 16px-Schritte machen kann, kann Pixelmovement eben auch kleinere Schritte machen und befindet sich somit zwangsläufig den Großteil der Zeit irgendwo zwischen zwei Tiles. Es ist also möglich, dass der Picture-Held aufeinmal zwischen zwei Tiles steht. Das ist nicht weiter kritisch, außer, auf einem der beiden Felder ist etwas, was ihn blockieren kann/soll: Während er von den Tile-koordinaten her noch "vor" dem Hindernis steht, befindet er sich aber optisch bereits weiter und hängt somit in dem Hindernis drin.
Wenn der Held jetzt, sagen wir mal, wirklich 16px breit ist, darf er sich also nicht mehr über den Kästchenmittelpunkt hinausbewegen, sollte in der Richtung neben ihm ein Hindernis stehen. Deine drei Schritte lösen dieses Problem nicht, sie sorgen nur dafür, dass der Held sich nur 1/3 oder 2/3 zwischen den Tiles befinden kann. Umgehen kann man das nur, indem jeder Tastendruck den Helden 16px bewegt, aber dann braucht man kein Pixelmovement mehr.
Ergo:
1. Spieler drückt Taste
2. Abfragen, wo der Held ist
3. Abfragen, ob das Feld vor ihm begehbar ist
3.1 JA: Kein Thema, Held darf bewegt werden.
3.2 NEIN: Abfragen, was die Position nach der Bewegung wäre. Geht sie über die Tile-Mitte hinaus, bzw. wäre die neue Position problematisch?
3.2.1 JA: Der Held darf sich nicht bewegen.
3.2.2 NEIN: Okay, kein Thema, Held darf bewegt werden.
So ganz grob. Abfragen, ob ein Feld begehbar ist, hast du ja schon raus, was noch nützlich ist ist abzufragen, welche Event-ID das Event auf dem Zielfeld hat. Ist diese 0, so ist dort kein Event, wenn doch, ist ein Event da (eben das Event mit der jeweiligen ID. Wenn du ordentlich bist, kannst du dann gezielt sagen, welches Event dort steht und ob es eine Blockade oder begehbar ist). Das ist wichtig für NPCs, aber auch wenn du im Upper Layer Sachen hast, die blockieren können, da dem Upper Layer soweit ich das im Kopf habe keine Terrain IDs zugewiesen werden können.
Ich weiß, dass ich sowas mal in einem alten Testprojekt hatte, aber das existiert garantiert nicht mehr.Kurz gesagt, du musst vor dem Bewegen des Bildes abfragen, wo es theoretisch nach der Bewegung wäre und ob es da sein darf.
Für das animieren könntest du einen eine Variable benutzen, die den Animationsstatus angibt (stehen, bewegen wenn Bewegung möglich ist, ...) und einen separaten Parallelen Prozess der anhand dieser Variable das Bild ändert.
Andere Frage:
Weißt du schon, wie du es erreichst, dass ein Held das größer als 16px ist unter einem NPC angezeigt wird, wenn es auf der Map direkt unter ihm steht? Bei einem Sidescroller (würde sich ja bei Jump'n Run anbieten) hättest du das Problem natürlich nicht. Oder wenn dein Held genau auf ein Tile passt.






Kurz gesagt, du musst vor dem Bewegen des Bildes abfragen, wo es theoretisch nach der Bewegung wäre und ob es da sein darf.
Zitieren








