Scrollen deaktivieren bzw. steuern

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
pikubik
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 76
Registriert: 09.04.2006, 17:51
Kontaktdaten:

Scrollen deaktivieren bzw. steuern

Beitrag von pikubik »

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?
Benutzeravatar
Mister L
Rätselmeister
Rätselmeister
Beiträge: 1913
Registriert: 21.03.2005, 01:55
Kontaktdaten:

Beitrag von Mister L »

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. :idea:
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"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Das genügt nicht, da AGS den Spieler immer zentriert darstellt. Sobald player.x größer als 160 wird, scrollt der Raum nach rechts.

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 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:

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);
  }
Bei before fadein noch StopScrolling() rein, fertig.
Use gopher repellent on funny little man
pikubik
Verpackungs-Wegwerfer
Verpackungs-Wegwerfer
Beiträge: 76
Registriert: 09.04.2006, 17:51
Kontaktdaten:

Beitrag von pikubik »

DANKE!!!

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);
  }
}
Jetzt kann man die Scroll-Geschwindigkeit jeweils in der Funktion noch mit einstellen, ist einfach am praktischsten so...
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Jo, kein Thema :)

Speed in die Funktion packen ist ne gute Idee.
Use gopher repellent on funny little man
Antworten