Frage zu If_num Befehl und Zustände von Objekten

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Frage zu If_num Befehl und Zustände von Objekten

Post: # 79974Post Icebaer3
19 Dec 2012, 22:34

Ich bin an einem Projekt und nun an einem Denkproblem angelangt, da benötige ich Hilfe. Die Tutorial, die Hilfe und Beispiele habe ich schon durch.

Ausgangslage:
leerer Raum, 1 Objekt mit 2 möglichen Zuständen

Das Objekt, in meinem Fall ein Smiley, soll sich verändern wenn eine Variable steigt oder sinkt. Beispielsweise über einen Butten der einen Wert erhöht. Unter 10 soll ein Smiley mit Tränen angezeigt werden, von 10 bis 80 dann ein normaler und ab 80 bis 100 einer mit Herzchen. Hier mein Skript:

Code: Select all

if_num (smile; <10)
  {
  setobj (smiley;2)
  break()
  }

if_num (smile; >9)
  if_num (smile; <80)
    {
    setobj (smiley; 1)
    break()
    }

if_num (smile; >100)
  setobj (smiley; 3)
Das es funktioniert habe ich ausprobiert, aber es geht nur 1 mal. Die Loop Funktion schmiert immer ab.

Entscheidende Fragen:
Wo packe ich das Skript rein? In das Objekt selbst, in das Raumskript oder wo?
Welche Verbesserungen kann ich vornehmen?
Wie kann ich die Abfrage über den gesammten Zeitraum machen?

Danke für die Mühe!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Frage zu If_num Befehl und Zustände von Objekten

Post: # 79976Post japanhonk
19 Dec 2012, 22:57

Hi und willkommen :

Die Loop Funktion schmiert ab, weil Du mit break () arbeitest.
Das ist hier aber nicht nötig, da ja durch die Variable immer nur eine Bedingung zutrifft.
Ggf musst Du nur drauf achten, wie "herum" Du eine solche Abfrage aufbaust -vom kleinen zum
grossen Wert hin oder umgekehrt.

Wenn Die Funktion im ganzen Spiel aktiv sein soll, dann empfehle ich den Einsatz eines Mainskripts, welches IMMER durchläuft. Das musst Du in den generellen Editoreinstellungen
für Dein Spiel dort dann auch angeben.

Soll das Skript nur in einem Raum laufen, dann kommt das Ganze in die loop1 Funktion des Raumes.

Soll es nur gelegentlich laufen, schreibst Du es als eigenständiges Skript und rufst es dann bei Bedarf einfach als Funktion ( nicht als Cutscene ! ) auf.

Ich würde es dann so schreiben :

if_num (smile; <10)
setobj (smiley;2)

if_num (smile; >9)
{
if_num (smile; <80)
setobj (smiley; 1)
}

if_num (smile; >100)
setobj (smiley; 3)
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Frage zu If_num Befehl und Zustände von Objekten

Post: # 79978Post Icebaer3
20 Dec 2012, 08:11

Jau super danke für die schnelle Antwort.

Die loop1 Funktion habe ich nicht ausprobiert, da ich laut der Onlinehilfe aus dem Programm eher auf loop2 gekommen bin. Hatte aber nicht geklappt.

Das Skript als eigene Funktion zu bauen hatte ich auch ausprobiert, das war aber nicht wirklich nötig, da ich es ja nur brauche wenn ich den Raum betrete.

Ein Mainskript habe ich auch, aber da war mir das auch überflüssig, soll ja nur in dem Raum ausgeführt werden.

Jetzt muss ich aber noch mal fragen:
Du sagts die Reihenfolge ist wichtig, also wie "herum" sie aufgebaut ist. Was wäre denn die bessere Lösung, mit klein oder mit groß anzufangen? Ich seh da noch nicht wirklich einen Unterschied, lasse mich aber gerne überzeugen :D

Das Skript kommt ja in den Raum rein. Würde dieses mit dem Objekt auch funktionieren, also das Skript ins Objektskript rein, ähnlich wie bei Adobe Flash möglich? Oder funzt das dann nur wenn ich das Objekt direkt ansteuer, bspw. durch ein on (click) event?


EDIT: Hat geklappt! Sau geil. Jetzt zu den nächsten Herausforderungen...

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Frage zu If_num Befehl und Zustände von Objekten

Post: # 79981Post japanhonk
20 Dec 2012, 12:29

Loop2 dient dazu, eine Schleife auch unterbrechen zu können, um eine Aktion als Spieler zu starten ( z.B. Figuren, die sich unterhalten und die man dann mal anspricht )

Loop1 dient dazu, immer wiederkehrende Ereignisse einfach nur zu wiederholen.

Raumskript :

on (loop1)
{
setobj (light;1)
wait (2)
setobj (light;0)
}

das ginge zwar auch, als eigenständige Funktion mit dem Zusatz infinity, aber man sollte darauf achten, nicht zu viele Funktionen gleichzeitig am Laufen zu haben. Die Performance leidet darunter bei mehr, als 10 Stück )


Zu den If _ Abfragen :

If_num (Y-Position;<3)
setobj ( Irgendwas; 1)

If_num (Y-Position;<2)
setobj ( Irgendwas; 2)

If_num (Y-Position;<1)
setobj ( Irgendwas; 3)


Hier soll der Wert Y-Position mal <1 sein: die ersten beiden Schleifenteile werden ausgeführt, aber quasi korrigiert , bis der letze Zustand greift.
Ich brauche hier keine breaks oder andere Abbruchbedingungen schreiben. Die Schleife muss aber eben länger durchlaufen, was bei umfangreichen Skripten dann auch mal etwas dauert.
Das Objekt "irgendwas" wird hier im Zustand immer wieder verändert, bis die richtige Bedingung eintrifft.

If_num (Y-Position;<1)
setobj ( Irgendwas; 3)

If_num (Y-Position;<2)
setobj ( Irgendwas; 2)

If_num (Y-Position;<3)
setobj ( Irgendwas; 1)

Hier wird die Schleife nur solange durchlaufen, bis der passende Wert zutrifft.
Andere Abfragen ändern nicht - wie oben - zuerst den Zustand, da bei einem Wert < 1
der Teil direkt nach dem If nicht zutrifft und auch nicht beachtet wird.
Das kann u.U. Zeit sparen und die Performance verbessern.

Ich hatte auch Fälle dabei, in denen der richtige Aufbau der Schleifen ein "schlankeres" Skript ermöglichte - also übersichtlicher und kürzer, weil ich weniger Abfragen abarbeiten musste.

Bei kleinen Skripts ist das eher egal, aber später kann das interessant werden.
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Re: Frage zu If_num Befehl und Zustände von Objekten

Post: # 79982Post parkiii
20 Dec 2012, 13:00

Ich dachte der Smiley 3 soll ab 80 bis 100 verwendet werden? Wieso dann if_num >100?

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Frage zu If_num Befehl und Zustände von Objekten

Post: # 79984Post Icebaer3
20 Dec 2012, 14:04

@japanhonk:
Jup, alles klar. Dachte ich mir schon, nur in dem einfachen Skript war nicht groß zu überlegen.
In dem Beispiel würde es eh erst im weiteren Spielfortschritt zu Punkt 3 kommen, da die
Variable ja erst mal bis auf 80 hoch muss.
Aber ich habe verstanden!

@parkiii:
Ja hab ich auch gesehen und entsprechend angepasst im Skript. Wollte nur nix dazu schreiben, weil das unnötig aufbauscht.
Bin ja kein Halber Dummer. Aber danke für den Hinweis.

parkiii
An Adventure Creator
Posts: 276
Joined: 30 Jun 2009, 13:58
Location: Austria

Re: Frage zu If_num Befehl und Zustände von Objekten

Post: # 79986Post parkiii
20 Dec 2012, 15:01

Wollt nur sichergehen, dass du das nicht übersiehst und später ratlos bist ;)
Solche Fehler entstehen ja nicht durch Dummheit sonder aus Schlampigkeit oder fehlender Konzentration. Kennen wir alle ^^

Post Reply