Also ich möchte folgendes:
In einem Raum mit den Maßen 600 X 240 würde ich gerne 2 Räume darstellen und je nach dem auf welcher Seite man ist sieht man rechts bzw. links einen kleinen übergangsbereich von 40 Pixeln...
LLLLLLLLÜÜRRRRRRRR
LLLLLLLLÜÜRRRRRRRR
LLLLLLLLÜÜRRRRRRRR
LLLLLLLLÜÜRRRRRRRR
L = linker Raum
R = rechter Raum
Ü = Übergang (sieht man immer)
Jetzt wollte ich wissen ob man das irgendwie hinbekommt, dass der Raum nicht mit dem Player mitscrollt, sondern eben erst auf direkten Befehl wenn der Spieler den Übergangsbereich betritt.
also sozusagen eine StopScrolling-Funktion und eine Scroll(x,y)-Funktion.
Gibts sowas?
Scrollen deaktivieren bzw. steuern
-
- Verpackungs-Wegwerfer
- Beiträge: 76
- Registriert: 09.04.2006, 17:51
- Kontaktdaten:
- Mister L
- Rätselmeister
- Beiträge: 1913
- Registriert: 21.03.2005, 01:55
- Kontaktdaten:
Könntest du da nicht mit unterschiedlichen "Walkable Areas" arbeiten?
Wenn der Spieler nur bis zu einem bestimmen Punkt gehen kann, scrollt der Screen auch nicht weiter.
Sobald man auch in den anderen Teil des Bildes kommen soll, könnte man einfach die entsprechende Area aktivieren.
Wenn der Spieler nur bis zu einem bestimmen Punkt gehen kann, scrollt der Screen auch nicht weiter.
Sobald man auch in den anderen Teil des Bildes kommen soll, könnte man einfach die entsprechende Area aktivieren.
My MMM-Episodes: #7 "Right said Fred", #32 "Secret of Maniac Mansion", # 33 "Carry on Smiley", H05 "Escape from Maniac Mansion", #45 "Maniac Monday", #54 "CSI:RONVILLE", #58 "The People's Court", #70 "Maniac Mansion Begins", #74 "The Curse of King RootenTooten", #93 "Murder a.t. Moonshine Mansion"
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Das genügt nicht, da AGS den Spieler immer zentriert darstellt. Sobald player.x größer als 160 wird, scrollt der Raum nach rechts.
Um AGS wieder die Kontrolle zu geben: ReleaseViewport(); (geschieht beim Raumwechsel automatisch).
Um jetzt umzusetzen, was Du erreichen willst, zeichnest Du auf dem Übergangsbereich eine Region ein. Bei walks onto region müsste dann rein:
Bei before fadein noch StopScrolling() rein, fertig.
Code: Alles auswählen
function StopScrolling() {
SetViewport(GetViewportX(), GetViewportY());
}
#define SPEED 3
function Scroll(int x, int y) {
if (x<0) x=0; if (x>Room.Width-320) x=Room.Width-320;
if (y<0) y=0; if (y>Room.Width-240) x=Room.Width-240;
int xa=x-GetViewportX();
int ya=y-GetViewportY();
if (xa>0) xa=SPEED; else if (xa<0) xa=-SPEED;
if (ya>0) ya=SPEED; else if (ya<0) ya=-SPEED;
while(GetViewportX()!=x || GetViewportY()!=y) {
if (GetViewportX()==x) xa=0;
if (GetViewportY()==y) ya=0;
SetViewport(GetViewportX()+xa, GetViewportY()+ya);
Wait(1);
}
}
Um jetzt umzusetzen, was Du erreichen willst, zeichnest Du auf dem Übergangsbereich eine Region ein. Bei walks onto region müsste dann rein:
Code: Alles auswählen
if (player.x<300) { // nach rechts scrollen
player.Walk(325, player.y);
Scroll(280, 0);
}
else { // nach links scrollen
player.Walk(275, player.y);
Scroll(0,0);
}
Use gopher repellent on funny little man
-
- Verpackungs-Wegwerfer
- Beiträge: 76
- Registriert: 09.04.2006, 17:51
- Kontaktdaten:
DANKE!!!
funktioniert alles bestens, genau so wie ich es wollte! Vielen Dank Khrismuc
edit:
Ich hab das Ganze jetzt noch folgendermaßen abgeändert:
Jetzt kann man die Scroll-Geschwindigkeit jeweils in der Funktion noch mit einstellen, ist einfach am praktischsten so...
funktioniert alles bestens, genau so wie ich es wollte! Vielen Dank Khrismuc
edit:
Ich hab das Ganze jetzt noch folgendermaßen abgeändert:
Code: Alles auswählen
function Scroll(int x, int y, int speed) {
if (x<0) x=0; if (x>Room.Width-320) x=Room.Width-320;
if (y<0) y=0; if (y>Room.Width-240) x=Room.Width-240;
int xa=x-GetViewportX();
int ya=y-GetViewportY();
if (xa>0) xa=speed; else if (xa<0) xa=-speed;
if (ya>0) ya=speed; else if (ya<0) ya=-speed;
while(GetViewportX()!=x || GetViewportY()!=y) {
if (GetViewportX()==x) xa=0;
if (GetViewportY()==y) ya=0;
SetViewport(GetViewportX()+xa, GetViewportY()+ya);
Wait(1);
}
}