Mit einem Skript ginge das schon, denke ich.
Aber grundsätzlich ist es eine gute Idee, alle Animationen eines Charakters in der gleichen Größe zu halten. Da hat man auch weniger Stress bei der Positionierung der Frames.
Abgesehen davon die Grafiken anzupassen, sehe ich folgende Möglichkeiten:
1. schalte die Zentrierung auf den Charakter aus, wenn der Charakter nicht läuft - automatisiert mit einen Skript.
function disableScroll()
if game.CurrentCharacter.AnimState ~= 1 then
-- wenn der Charakter nicht läuft (1 = walk)
game.ScrollCenterCharacter = false
else
game.ScrollCenterCharacter = true
end
end
registerEventHandler("mainLoop", "disableScroll")
(da könnte man noch eine Bedingung vorschalten, die bei Beginn der scollenden Szenen umgeschaltet wird)
oder
2. schalte die Zentrierung bei den scollenden Szenen mit dem Aktionsteil bei Beginn der Kulisse aus und bastle für diese Szenen ein eigenes Scrollen.
function NewScroll()
if game.ScrollCenterCharacter == false then -- wenn Zentrieren auf Charakter ausgeschaltet ist
local pos = game.CurrentCharacter.Position -- Charakterposition speichern
local scrollpos = pos.x - game.WindowResolution.x/2 -- Scrollposition auf X-Achse berechnen (obere linke Ecke des Bildschirms)
if scrollpos < 0 then scrollpos = 0 end
if game.ScrollPosition.x ~= scrollpos then
game.ScrollToPoint = {x = scrollpos, y = game.ScrollPosition.y} -- zur neuen Position scrollen (nur X-Achse)
end
end
end
registerEventHandler("mainLoop", "NewScroll")
Wobei hier das Scrollen unmittelbar einsetzt, sobald sich der Charakter bewegt, ohne die sonst eingebaute Pufferzone.
Edit: Da fällt mir ein: das Aus- und Anschalten der Zentrierung nach Lösung Nr. 1 könnte man auch ohne Skript in die jeweils ersten Frames der Lauf- bzw. Stand-Animation legen.