SetGlobalInt und GetGlobalInt

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
gff
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 802
Registriert: 09.03.2004, 18:49
Wohnort: Ge
Kontaktdaten:

SetGlobalInt und GetGlobalInt

Beitrag von gff »

Hallo,
beim programmieren tauchten ein paar Probleme auf.Der Spieler soll zwei Gegenstände benutzen.Wird der erste benutzt wird eine Dialogoption "disabled" und eine neue Option freigeschaltet.Das gleiche passiert beim zweiten (wobei wieder der gleiche Dialogpunkt verschwindet und ein neuer hinzukommt).Beide Gegenstände eleminieren also einen Dialogpunkt.Wie sie angewendet werden,in welcher Reihenfolge,ist egal.
Wenn beide Gegenstände benutzt wurden soll ein neuer Dialog aufgerufen werden der die Benutzung beider bestätigt.
Dazu habe ich mit SetGlobalInt gearbeitet:

der erste Gegenstand

Code: Alles auswählen

//Hotspot:
if(player.ActiveInventory==inventory[2])
{
player.LoseInventory(inventory[2]);
player.AddInventory(inventory[3]);

SetDialogOption(0,3,eOptionOff);
SetDialogOption(0,4,eOptionOn);

SetGlobalInt(1,0);

if (SetGlobalInt(1,0) == 0)
	{
  SetGlobalInt(1, 1);
	}
else if (SetGlobalInt(1,0) == 1)
	{
  SetGlobalInt(1, 2);
	}

}  
der zweite Gegenstand

Code: Alles auswählen

// script for Object 1: Use inventory on object

object[1].Visible=false;
object[0].Visible=true;
player.LoseInventory(inventory[1]);
SetDialogOption(0,3,eOptionOff);
SetDialogOption(0,5,eOptionOn);  

SetGlobalInt(1,0);
if (SetGlobalInt(1,0) == 0)
	{
  SetGlobalInt(1,1);
	}
else if (SetGlobalInt(1,0) == 1)
	{
  SetGlobalInt(1,2);
	}
das Global script
// main global script file

#sectionstart game_start // DO NOT EDIT OR REMOVE THIS LINE
function game_start() {
// called when the game starts, before the first room is loaded
InvItemAnimation.Start(iSO, VIEW9, 1, 10, eRepeat);

SetGlobalInt(1,0);
...//rest des Global scripts
Ein Wert soll also auf Zwei gesetzt werden.Mit den if Anweisungen soll sichergestellt werden das der wert des GlobalInt nach benutzung beider Gegenstände auf Zwei angekommen ist.

Danach soll der Dialog erscheinen.Testweise habe ich versucht einen Charackter einfach aus dem raum zu nehmen wenn der richtige Wert vorliegt:

Code: Alles auswählen

  // script for Character 2 (Old Jervie): Interact character
if (SetGlobalInt(1,0) == 2)
{
 character[OJ].ChangeRoom(1);
}    
  
So,das ist das.Jetzt das Problem:Old Jervie verschwindet nicht!
Könnt ihr mir sagen wo der Fehler lieg?
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

SetGlobalInt(1,0);

if (SetGlobalInt(1,0) == 0)
{
SetGlobalInt(1, 1);
}
else if (SetGlobalInt(1,0) == 1)
{
SetGlobalInt(1, 2);
}

}
1. In einer if-Abfrage solltest du GetGlobalInt, nicht SetGlobalInt verwenden. (Funktioniert das so überhaupt?)
2. Du setzt zunächst GlobalInt 1 auf den Wert 0 und fragst dann, ob er den Wert 0 hat? Das scheint etwas unsinnig, außerdem wird er so nie den Wert 1 haben, zumindest nicht so, dass die else-Abfrage richtig sein wird. Eine else-Abfrage wird überhaupt nur dann beachtet, wenn das if vorher als falsch angesehen wurde.
// main global script file

#sectionstart game_start // DO NOT EDIT OR REMOVE THIS LINE
function game_start() {
// called when the game starts, before the first room is loaded
InvItemAnimation.Start(iSO, VIEW9, 1, 10, eRepeat);

SetGlobalInt(1,0);
...//rest des Global scripts
4. Außerdem hat der GlobalInt ja von Anfang an den Wert 0, da du dies ja in GameStart festlegst.

Folgendes passiert im Moment bei dir:
1. Der GlobalInt wird beim Starten des Spiels auf 0 gesetzt
2. Der GlobalInt wird durch den ersten Gegenstand erneut auf 0 gesetzt
3. Es wird abgefragt, ob GI 1==0, was immer zutrifft, deshalb wird GI 1 =1
4. Das else tritt nie in Kraft, da das if immer wahr ist
5. Der GlobalInt wird durch den zweiten Gegenstand erneut auf 0 gesetzt
6. Die if-Abfrage setzt ihn immer automatisch wieder auf 1
7. Das else tritt nicht in Kraft
// script for Character 2 (Old Jervie): Interact character
if (SetGlobalInt(1,0) == 2)
{
character[OJ].ChangeRoom(1);
}
Ich frage mich wirklich, was ein if mit SetGlobalInt soll. Ich hätte eigentlich vermutet, dass da eine Fehlermeldung kommt. Andererseits könnte es sein, dass durch diese Schreibweise der Wert auch immer wieder auf 0 gesetzt wird. Naja, das ist nicht unbedingt wichtig, ändere es einfach hinter dem if immer in GetGlobalInt.

Also, um das ganze auf einen brauchbaren Punkt zu bringen:
1. Ändere SetGlobalInt in GetGlobalInt, wo es notwendig ist
2. Lass die Zeile in GameStart stehen, die ist vollkommen richtig so.
3. Streich die beiden SetGlobalInt vor den if-else-Abfragen, die sind sinnlos.
4. Vergiss nicht, dass du den Charakter anklicken musst, damit er verschwindet, du hast das immerhin bei interact character reingeschrieben (und nicht in die repetedly execute, wo ich sowas zum testen reinsetzen würde) :lol:

Theoretisch müsste es dann gehen.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

@Sinitrena:
if (SetGlobalInt...) erzeugt keine Fehlermeldung, da SetGlobalInt eine Funktion ist und anscheinend irgendeinen Integerwert zurückliefert.

@ggf:
Der Code nach dem Benutzen muss jeweils so aussehen:

Code: Alles auswählen

SetGlobalInt(1, GetGlobalInt(1)+1); // Erhöhung von GI 1 um 1
Das genügt in diesem Fall, da jeder Gegenstand nach dem Benutzen verschwindet. Beide Gegenstände benutzt -> GI 1 wurde zweimal um 1 erhöht und ist jetzt 2.

Es ist übrigens unnötig, GlobalInts in der game_start auf 0 zu setzen, denn diesen Wert haben sie von Haus aus.

Lustig auch, dass Du das Thema "SetGlobalInt und GetGlobalInt" genannt hast, aber kein einziges Mal GetGlobalInt im Code verwendet hast (zumal es ja auch nötig wäre) ;)
Use gopher repellent on funny little man
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Extra-Post, falls es nicht ganz klar ist:

Dein Code hätte ganz ausführlich so aussehen müssen:

Code: Alles auswählen

if (GetGlobalInt(1)==0) {
  SetGlobalInt(1, 1);
}
else if (GetGlobalInt(1)==1) {
  SetGlobalInt(1, 2);
}
Stell Dir die GlobalInts wie durchnumerierte Tafeln vor, auf denen eine beliebige Zahl steht.
SetGlobalInt(T, Z); schreibt die Zahl Z auf die Tafel Nr. T
GetGlobalInt(T) liefert die Zahl zurück, die auf Tafel Nr. T steht.
Use gopher repellent on funny little man
Benutzeravatar
gff
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 802
Registriert: 09.03.2004, 18:49
Wohnort: Ge
Kontaktdaten:

et geht!!!

Beitrag von gff »

Okay,danke erstmal :D
Hab die beiden SetGlobalInts rausgenommen(die waren einfach nur drin weil ich dachte das ich eine Globale Variable in einem roomskript definieren müsste ](*,) wie ich darauf verfallen bin:keinPlan^^)
Weiterhin hatte ich einen Fehler wenn ich schrieb:

Code: Alles auswählen

if (GetGlobalInt(1,0) == 0)
Hier darf GetGlobal nämlich keinen Wert haben(in unserem Fall die Eins)
richtig muss es heißen:

Code: Alles auswählen

if (GetGlobalInt[u](1) [/u]== 0)
Und siehe da:jetzt klappt das wie am Schnürchen
:wink:
Danke,Sinitrena,für die schnelle Hilfe!
Wenn das Spiel fertig ist kommst Du in die Credits.Versprochen!!

Nachtrag:Sehe gerade das auch khrismuc was geschrieben hat.Hatte ich jetzt garnicht gesehen,sorry dafür!
Dein Vorschlag sieht kompakter aus;also werd ich den einbauen.
Und Du kommst natürlich auch in die Credits :wink:

MfG:gff
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

@Sinitrena:
if (SetGlobalInt...) erzeugt keine Fehlermeldung, da SetGlobalInt eine Funktion ist und anscheinend irgendeinen Integerwert zurückliefert.
Im Prinzip logisch, aber doch etwas idiotisch, weil so eine Abfrage einfach keinen Sinn ergibt. Naja, das ist ja eigentlich nicht wichtig.

khrsmucs Vorschlag ist kompakter, ich würde ihn allerdings dennoch nie verwenden. Das ist wahrscheinlich etwas persönliches, aber ich finde die Methode unübersichtlicher obwohl sie kürzer ist. Ich ziehe es vor, eher weniger mit Werten zu rechnen und sie lieber direkt festzusetzen, weil ich dann immer genau weiß, welchen Wert ein Int gerade hat oder haben sollte. Wie gesagt, dass ist eine persönliche Einstellung (und bei einem so kurzen Beispiel ist es für die meisten wahrscheinlich wirklich mit khrismucs Methode besser - nur nicht für micht)

Was die Zeile im GameStart betrifft: Ich hatte irgendwie vergessen, dass man sie eigentlich nicht braucht. Wenn man viele GlobalInts oder auch sonstige ints (global) verwendet, dann ist es recht nützlich sie an den Beginn des GlobalScripts zu schreiben und hintenan als Komentar den Verwendungszweck zu setzen (am Anfang des Global Script, weil man es dort leicht wieder findet - im Gegensatz zu einer Erklärung irgendwo wo man den Int zum ersten Mal braucht) Das ist aber wohl erst nötig, wenn man viele GlobalInts verwendet.
Danke,Sinitrena,für die schnelle Hilfe!
Wenn das Spiel fertig ist kommst Du in die Credits.Versprochen!!
Ich weiß gar nicht, wie viele Leute das schon versprochen haben - und warte immer noch darauf, dass ich in der AGS Spiele Datenbank als Mitarbeiter an einem anderen als meinen eigenen Spielen eingetragen werde. :wink:
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
gff
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 802
Registriert: 09.03.2004, 18:49
Wohnort: Ge
Kontaktdaten:

Ein neues Problem

Beitrag von gff »

Sinitrena hat geschrieben: Ich weiß gar nicht, wie viele Leute das schon versprochen haben - und warte immer noch darauf, dass ich in der AGS Spiele Datenbank als Mitarbeiter an einem anderen als meinen eigenen Spielen eingetragen werde. :wink:
Also wenn mein Spiel fertig wird trag ich dich gerne ein.^^
Zum Releasedatum:das Spiel wird zwei Tage nach Indiana Jones 4 veröffentlicht(oder früher) :wink:

Heute hab ich es geschafft AGS zum Absturz zu bringen...
Ich habe geschrieben:

Code: Alles auswählen

while(Object.GetAtScreenXY(415,20) !=oW)
{
object[1].Move(415,20,8);   
}

	while(Object.GetAtScreenXY(415,20) == oW) 
	{
	object[1].Move(1,21,8);
	}

Rest des Scripts mit Dialogen und PliPlaPlo...

 
Damit wollte ich ein Objekt von einer Seite des Bildschirms auf die andere bringen.Zum testen benutze ich hier object.Move (hinterher nehme ich dann SetPosition).
Gerade sehe ich daß noch eine Umfassung nötig ist, die die Dauer festlegt(z.B Spieler verläßt den Raum)

Mir ist klar daß man das auch mit repeatly_Execute lösen könnte.Nur finde ich keinen Weg dem Global Script klarzumachen welches Objekt gemeint ist...
Als ich das also compiliert habe war ein dann Absturz die Folge.Meine Fragen :Würde das theoretisch das hin und her laufen?
Wenn ja,wie erreiche ich es das der Rest des Scripts(ein Dialog)trotzdem ausgeführt wird?
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

Du gibst im Moment noch etwas zu wenig Informationen:
1. Was ist oW? Ist das die Bezeichnung für dein Objekt? Wahrscheinlich schon, aber dazu später mehr.
2. In welchem Teil des Scripts hast du das denn geschrieben?

Wenn du festlegen willst, welches Objekt gemeint ist, musst du nicht erst GetAtScreenXY benutzen. Das geht über eine Nummer in eckigen Klammern, was du hier ja auch machst (object[1].Move(1,21,8 ) ; ). Was soll dann aber überhaupt die Zeile mit GetAtScreenXY? Wenn du wissen willst, an welcher Position sich das Objekt im Moment befindet, dann brauchst du eher Object.X und Object.Y.
Wenn du also wissen willst, ob sich Objekt 1 an der Position 415, 20 befindest, fragst du:
if ((Object[1].X==415)&&(Object[1].Y==20)) {
...
}

Ich sehe hier übrigens keinen Grund mit while zu arbeiten. While stopt immer den Rest des Scripts und führt nur das in geschweiften Klammern aus, bis das while nicht mehr wahr ist - solange wird der Befehl immer neu ausgeführt.
Etwas, das immer wieder geschieht, kommt im allgemeinen in rep_ex (manchmal auch in rep_ex_always, aber das braucht man nur selten).
Wenn ich das richtig verstehe, soll das Objekt sich von der einen zur anderen Seite bewegen (und wieder zurück, wenn es angekommen ist?)
Du würdest also in rep_ex schreiben:
if ((Object[1].X==415)&&(Object[1].Y==20)) {
object[1].Move (1,21,8 );
}
else if ((Object[1].X==1)&&(Object[1].Y==21)) { //für den Rückweg
object[1].Move (415,20,8 );
}

Wenn sich das Objekt aber nur ein einziges Mal bewegen soll, gibt es natürlich keinen Grund das in rep_ex zu schreiben (ist für mich gerade nicht ersichtlich, wie das gemeint ist).
Mir ist übrigens auch nicht ganz klar, wann der Dialog ablaufen soll, aber er würde wohl nicht in eine rep_ex gehören - hin und wieder muss das zwar sein, aber dann muss man aufpassen, dass er nicht immer wieder abläuft, wenn das nicht passieren soll.

Alle Klarheiten beseitigt? :lol:
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
gff
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 802
Registriert: 09.03.2004, 18:49
Wohnort: Ge
Kontaktdaten:

Beitrag von gff »

Sinitrena hat geschrieben:Alle Klarheiten beseitigt? :lol:
Jetzt ja 8-[
1. Was ist oW?
oW ist das Objekt(oW ist der Scriptname)
2.In den roominteractions(after fade in)->run script und da ganz oben drin(also oben im room Script)

Ich wollte mit GetAtScreenXY nicht festlegen welches Objekt gemeint ist.
Das Objekt startet links oben (1,21) und soll nach rechts laufen solange seine Position nicht (415,20) ist.

a (1,21) -------------------------------------------------------->b (415,20)
while oW nicht (415,20)

Eigentlich soll das Objekt nach b laufen und dann zurückgesetzt werden(das Objekt ist eine vorbeiziehende Wolke und die kommen recht selten zurück :wink: )
Die Wolke soll also laufen und während sie das im Hintergrund tut,läuft der Dialog ab.

Noch mal zu rep_ex(Kurznamen sind gut^^):
Das rep_ex ist ja im Global script.Wie weiß den AGS welches Objekt gemeint ist?Ich hatte ausprobiert die Sache im rep_ex zu machen.Nur bekam ich eine Fehlermeldung weil das Objekt unbekannt war...

Ich probier jetzt aber mal Deine Version aus.Danke nochmals

MfG:gff
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

Das rep_ex ist ja im Global script.
Es gibt auch einzelne für jeden room, schau nochmal genauer.
Das Objekt startet links oben (1,21) und soll nach rechts laufen solange seine Position nicht (415,20) ist.
Ich sollte aufmerksamer lesen, da stand ja != und nicht == mein Fehler.

Noch mal auf dein Problem hin etwas genauer was du machen musst:
Ich bleibe dabei, die Wolke gehört in die rep_ex. Da du das Bewegen nur einmal starten musst brauchst du if und nicht while (und weil while ja den Rest des Scripts unterbricht). Ich würde also folgendes schreiben (in rep_ex):
if ((object[1].X==1)&&(object[1].Y==21)) { //damit es nur starten, wenn das Objekt an dieser Stelle ist
object[1].Move(415,20,8 );
}
else if ((object[1].X==415)&&(object[1].Y==20)) {
object[1].SetPosition (1,21);
}

Der Dialog soll also im Prinzip starten, wenn der Spieler den Raum betritt? Das würdest du dann natürlich in after_fade_in kommen, es sei denn, das soll zu einem anderen Zeitpunkt starten.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

Wie wärs mit:

Code: Alles auswählen

if (object[1].X==1)
  object[1].Move(415,20,8 );
else if (object[1].X==415)
  object[1].SetPosition (1,21);
Es muss übrigens in die repeatedly_execute_always, damit es auch während Dialogen weiterläuft.

Bei dieser Bewegung wird die Wolke übrigens die halbe Strecke auf Y=20 laufen, dann einen Pixel runterspringen und auf Y=21 den Rest laufen, weiß nicht, ob das so schön ausschaut.
Use gopher repellent on funny little man
Benutzeravatar
gff
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 802
Registriert: 09.03.2004, 18:49
Wohnort: Ge
Kontaktdaten:

Beitrag von gff »

Ich nochmal.Sorry wenn ich lästig falle :wink:
ich hab das mal getestet.Wenn ich es in die After Fade in Interaction packe funktioniert das Laufen.Die Wolke bewegt sich also von links nach rechts.Also sind walkable area und die Begrenzungen in den Settings als Fehlerquelle ausgeschlossen.(BTW:ich hab die Koordinaten etwas mehr in den Raum gesetzt um ganz sicherzugehen
Wenn ich das ganze dann in die rep_ex packe(die vom Raum.Denn ich hab sie jetzt gefunden.Juchhhuu^^) und das Spiel starte und den Raum betrete bewegt sich die Wolke nicht.Erst dachte ich man dürfe vieleicht die Wolke nicht "ausserhalb" des Schirms aussetzten.Damit die Wolken einmal ganz über den Bildschirm ziehen hatte ich den Raum nämlich an beiden Seiten größer als den Bildschirm gemacht.Doch als ich die Wolke in die Mitte setzte,die man auch beim Start sieht und die Koordinaten anpasste,bewegte sie sich trotzdem nicht :cry:

@khrismuc:
in den roominteractions finde ich keine repeatedly_execute_always

MfG:gff
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

Hm, dazu fällt mir im Moment nur ein, dass sich die Wolke vielleicht nicht auf der exakten Position befindet? Aber das ist jetzt mehr eine Vermutung - khrismuc, hilf!!!

in den roominteractions finde ich keine repeatedly_execute_always
Interessanterweise findet sich das anscheinend niergends in der Hilfe (ich dachte das stünde da irgendwo), aber rep_ex_al musst du erst selbst erstellen. Du öffnest einfach das room script und schreibst dort an den Anfang im Prinzip alles so wie bei rep_ex nur eben mit dem always hintendran.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Benutzeravatar
gff
Profi-Abenteurer
Profi-Abenteurer
Beiträge: 802
Registriert: 09.03.2004, 18:49
Wohnort: Ge
Kontaktdaten:

Beitrag von gff »

rep_ex_al steht drin.Nur steht da nicht das man das selbst machen muss.
Geht das jetzt einfach so?

Code: Alles auswählen

// room script file
#sectionstart repeatedly_execute_always  // DO NOT EDIT OR REMOVE THIS LINE
function repeatedly_execute() {
  // put anything you want to happen every game cycle here

 
if (object[1].X==8)
	{
  object[1].Move(415,21,4);
	}  

else if(object[1].X==415)
	{
  object[1].SetPosition(8,21);
	}  
}
#sectionend repeatedly_execute_always  // DO NOT EDIT OR REMOVE THIS LINE
Ich hab das so gemacht.Wirkung bleibt weiterhin aus...
Ein Kuriosum hatte ich aber gestern:
Ich legte einen Hotspot in den Raum der einfach die Message "Hallo" ausgibt wenn man ihn ansieht.Und da fliegt dann die Wolke oben entlang.Wenn man dann noch mal den Hotspot klickt fliegt sie wieder-genau so wie sie es laut Script tun sollte...verrückt^^

MfG.gff
Benutzeravatar
Sinitrena
Tastatursteuerer
Tastatursteuerer
Beiträge: 678
Registriert: 08.05.2004, 01:01
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von Sinitrena »

Ich sollte mich klarer ausdrücken:
function repeatedly_execute() {
Diese Zeile bildet nur eine gewöhnliche rep_ex. Es muss heißen:
function repeatedly_execute_always() {
...
}
Diese
#sectionstart repeatedly_execute_always // DO NOT EDIT OR REMOVE THIS LINE
und diese
#sectionend repeatedly_execute_always // DO NOT EDIT OR REMOVE THIS LINE
Zeile sind übrigens nicht notwendig in diesem Fall.

Ich weiß, dass ich den Effekt, den du beschreibst auch schon mal hatte, aber ich kann mich im Moment nicht daran erinnern, woran es lag und wie ich es gelöst habe. Im Grunde müsste das doch so gehen, oder? Wo liegt denn im Moment nur mein Denkfehler? :x
Ich werde mir das nochmal genauer ansehen, aber dafür brauche ich eine Weile.

EDIT: Ich hab mal ein bischen rumprobiert und kann dir jetzt helfen. Durch eine zusätzliche Variable, nennen wir sie einmal wolke wird das Problem gelöst. Anscheinend versucht die Wolke immer von neuem zu starten, was dazu führt, dass sie nie wirklich losfliegt. So funktioniert es:

Code: Alles auswählen

// room script file
int wolke;
function repeatedly_execute_always() {
 if (object[0].X==40) {
   if (wolke==0) {
     object[0].Move(100,40,4,eNoBlock,eAnywhere);
      wolke=1;
      }
   }
   else if (object[0].X==100) {
     wolke=0;
     object[0].SetPosition(40,40);
     } 
  }
Die Werte müssen oben noch entsprechend eingesetzt werden.
http://www.sinitrena.de.vu Meine Spiele: "A very special dog", "A magic stone", "James Bond - Who wants to live again?", "Lonely Night", "Death of an Angel", "The Witch, the Wizard and the Blue Cup", "Emerald Eyes"
Antworten