Spiegelung in ags Script...

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
sirkaleb
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 10
Registriert: 06.08.2009, 14:42

Spiegelung in ags Script...

Beitrag von sirkaleb »

hab mir den mirror.zip ordner geladen und kann auch sehen das sowas funktioniert. Aber ich kann das game im editor nicht öffnen und versteh deshalb auch nicht wie das mit der Spiegelerstellung funktioniert. Kann mir das mal jemand schritt für schritt erklären. Wär echt super. Hätt gerne einen Spiegel in meinem Zimmer ^^
Achja geht das eventuell auch das ganze so umzuschreiben das man eine boden-Spiegelung bekommt. Wär auch nich übel.
Danke im voraus...
Benutzeravatar
Azrael
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 124
Registriert: 13.05.2003, 16:46
Kontaktdaten:

Re: Spiegelung in ags Script...

Beitrag von Azrael »

Hallo Sirkaleb,

ich habe mir diese Datei gestern heruntergeladen und getestet. Das Prinzip ist folgendes:

Beim Eintreten in den Raum wird festgelegt, dass die Objekttransparenz (der Spiegel) 60% beträgt und sich ein 2. Charakter (MEGO = Spiegelbild des eigentlichen Charakters) im Raum befinden soll.

oMirror.Transparency=60;
cMego.ChangeRoom(1, 160, 130);


Anschließend wird im "Repeatedly execute"-Mode folgendes Skript ausgeführt:

int dx=player.x-160;
int dy=player.y-100;
int ny=160-((player.y-160)*4)/10;
int nx=160+((ny-100)*dx)/dy;
cMego.x=nx;
cMego.y=ny;
cMego.Frame=player.Frame;
if (player.Loop==0) cMego.Loop=3;
else if (player.Loop==3) cMego.Loop=0;
else cMego.Loop=player.Loop;


Dieses fragt die Koordinaten des Spielers ab und versetzt diese bzw. sorgt für gegengleiches Laufen. Anschließend werden dem 2. Charakter die errechneten Koordinaten zugewiesen. Bewegt sich der Charakter, bewegt sich das Spiegelbild sofort nach seinen Koordinaten mit. Die if-Abfrage sorgt dafür, dass sich Charakter und Spiegelbild immer gleichzeitig Vorder- oder Rückseite zuwenden, seitwärts aber die gleichen Loops der View verwenden. Durch die Objekttransparenz erscheint der Charakter transparent. Über Walkbehinds wird sichergestellt, dass nur ein Teil des Spiegelbildes sichtbar ist.

Nachdem ich noch AGS 2.54 verwende und den Code oben so nicht verwenden kann, hab ichs umgeschrieben. Hier ist meine Version (kann jeder nutzen, der wie ich ältere AGS-Versionen verwendet):

SetCharacterTransparency(MEGO, 100);
int dx=character[EGO].x+5;
int dy=character[EGO].y-10;
int ny=200-dy;
character[MEGO].x=dx;
character[MEGO].y=ny;
character[MEGO].frame=character[EGO].frame;
if (character[EGO].loop==0) {
character[MEGO].loop=3;
}
else if (character[EGO].loop==3) {
character[MEGO].loop=0;
}
else {
character[MEGO].loop=character[EGO].loop;
}


Mein Skript ist etwas einfacher aufgebaut, da ich mich bei den y-Koordinaten auf einen festen Bezugspunkt beziehe und bei mir nicht das Objekt, sondern der 2. Charakter transparent wird. Über mehrere Hotspots hab ich noch den Effekt eingebaut, dass die Transparenz laufend zunimmt - ist der Charakter weit weg vom Spiegel, ist sein Spiegelbild nicht mehr sichtbar. Je näher er zum Spiegel geht, desto sichtbarer wird er - sieht Klasse aus.

Eine Bodenspiegelung sollte wesentlich einfacher sein, weil der 2. Charakter nur mit dem Kopf nach unten schaut. Ich würde das wie folgt realisieren:

1. Neue View generieren, die der View des Charakters entspricht, nur spiegelverkehrt (Kopf nach unten). Beim Rechts/Links-gehen auf die richtige Richtung achten (ggf. sonst durch eine if-Abfrage der Loops korrigieren).
2. Neuen Charakter erstellen, der MEGO heißt und die neue View nutzt
3. Folgendes Skript im "Repeatedly execute"-Mode ausführen (hab ich jetzt nicht getestet, sollte aber passen):

int dx=player.x;
int dy=player.y;
cMego.x=dx;
cMego.y=dy+60; //60 = Beispiel für die Größe des Charakters, kann auch größer/kleiner sein
cMego.Frame=player.Frame;
cMego.Loop=player.Loop; //gegebenenfalls hier über eine if-Abfrage eine Rechts-Links-Korrektur vornehmen, Loop 1 und Loop 2


4. Transparenz des Charakters auf 50% oder 60% stellen

Das sollte es im Prinzip gewesen sein. Hoffe, ich habe dir helfen können und du kennst dich halbwegs aus!

Viele Grüße,
Azrael :D
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Re: Spiegelung in ags Script...

Beitrag von KhrisMUC »

Wegen der Bodenspiegelung: es reicht, wenn jedes Frame der Spiegel-View auf dem Kopf steht. Man muss nicht auf den Loop achten.
Wichtig ist nur, dass sich die Anzahl der Pixel, um die der Spiegelcharakter weiter unten dargestellt wird, verändert, falls man den Charakter skalieren lässt.

Theoretisch könnte man übrigens die Spiegel-View-Frames beim Spielstart automatisch von AGS generieren lassen, sofern man eine View mit allen Frames anlegt.
Use gopher repellent on funny little man
sirkaleb
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 10
Registriert: 06.08.2009, 14:42

Re: Spiegelung in ags Script...

Beitrag von sirkaleb »

oh super danke für die schnelle Antwort. Werd das gleich mal umsetzen. Is ja genial.
Antworten