Frage Zu GML

  • Frage Zu GML

    hi leute :)

    also, ich bin schon nen alter hase in der gamemaker community, doch war ich ne zeitlang inaktiv usw.

    naja, in dieser zeit habe ich andere programmiersprachen kennengelernt, und kann fast alles programmieren was mir einfällt...naja, jetzt erstmal schluss von mir, so:

    ich habe da jetzt ein kleines problem mit GML, ich weiß garnicht wie die sprache läuft, also nehmen wir mal an ich hätte diesen code:

    Zeile1;
    Zeile2;
    Zeile3;

    so, nun ist die frage, nehmen wir mal an er ist noch nicht mit den ereignissen der ersten zeile fertig, geht er schon weiter und macht das nächste, also zeile2, und arbeitet weiter an zeile1? oder ist das so, erst zeile1, dann zeile2, dann zeile3.

    so, manchmal sehe ich ein simikolon, und manchmal nicht, was heißt das? in delphi ist das ja sowas wie ein end, bzw kommt es nach end, nur weiß ich nicht was ich damit hier in GMl anfangen soll...

    ich bin mir sicher ich hätte das wo nachlesen können, nur wollte ich nicht stundenlang danach suchen wenn ich eure kompetente hilfe beanspruchen darf :)

    MFG Gilgamesch, danke im vorraus!

    PS: wenn ich das erstmal weiß dann könnt ihr schonmal auf nen projekt von mir gefasst machen :)
    omfg...was hatte ich hier für scheiß signaturen drinne? :D xD

    naja, neue:


    "And in the end, it's not the years in your life that count. It's the life in your years"


    besser :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gilgamesch ()

  • Der Gamemaker arbeitet Zeile für zeile durch, allerdings innerhalb eines steps/frames (Gibts etwa Programmiersprachen indenen bei Zeilen die nicht sofort ausgeführt werden können, bereits nachfolgende Zeilen ausgeführt werden? Erscheint mir unlogisch... )
    In GML kannste das Semikolon weglassen, wirkt sich nur beim debuggen negativ aus, da die Zeilen mit Fehlern nicht ermittelt werden können.
    Das mit dem End hab ich nicht ganz verstanden. Hab mich zwar nicht sodnerlich intensiv mit Delphi beschäftigt aber soweit ich weiß muss man da nach jedem Befehl n Semikolon setzten (IF, Schleifen, BEGINS etc. ausgenommen, was ja klar is) und ein "Begin" und "end;" ist identisch mit "{" und "}" im GM, wobei der GM auch mit "begin" und "end" arbeiten kann, was ich aber noch in keinem fremdem (und eigenem) code zu Gesicht bekommen hab
  • aso cool, danke :)

    so, dann noch ne frage direkt dazu, nehmen wir mal an ich hab das hier:

    move_towards_point(x,y);
    speed= 0;


    geht dann das objekt bis zu den koordinaten, dann setzt es die geschwindigkeit auf 0? wenn ja, warum geht das nicht?


    also delphi, joa also z.b:


    procedure form1.bla(bla)
    var: z,i;
    Begin
    I = 0;

    for z := 1 to 100 do
    i:= i+z;

    end;


    nach dem do bräuchte man nur dann ein begin wenn mehrere befehle folgen..


    also, nur so, dachte mal wir klären das kurz :)


    vielen dank für die schnelle antwort
    omfg...was hatte ich hier für scheiß signaturen drinne? :D xD

    naja, neue:


    "And in the end, it's not the years in your life that count. It's the life in your years"


    besser :)
  • Original von Gilgamesch
    so, dann noch ne frage direkt dazu, nehmen wir mal an ich hab das hier:

    move_towards_point(x,y);
    speed= 0;

    geht dann das objekt bis zu den koordinaten, dann setzt es die geschwindigkeit auf 0? wenn ja, warum geht das nicht?

    aus der help:
    move_towards_point(x,y,sp) Bewegt die Instanz mit der Geschwindigkeit (sp) zum Punkt(x,y).

    1. Wurde dieser snytax nicht eingehalten. Kommt da keine Fehlermeldung?
    2. Bewegt der Befehl die Instanz eben nur auf die Zielkoordinate hin. Wenn sp=1 is, dann eben nur einen einzigen Pixel in richtung Ziel. Wenn der Befehl allerdings im Stepevent regelmäßig ausgeführt wird, bewegt sich die Isntanz dann auch kontinuirlich auf das Ziel mit der Geschwindigkeit sp zu.

    Ich denke mal du willst das ein Object bis zu einem Punkt geht und dann stehen bleibt?
    So sollte der Code dafür aussehen (im stepevent):

    GML-Quellcode

    1. if distance_to_point(x,y)>sp
    2. move_towards_point(x,y,sp)

    Ohne die Abfrage würde er am Zielpunkt nicht still stehen sondern ruckeln, da er ihn mit hoher Wahrscheinlichkeiti ständig überschreitet.
    Mir ist bewusst das er nun kurz vor dem Punkt stehen bleiben würde (je nach sp)
    Falls du willst das wirklich genau auf den Punkt kommt, kannste n else dranhängen und da den x/y wert gleich auf die zielkoordinate setzten.

    Ach und herzlich willkommen zurück in der commu!
    Kann mich aus meiner Anfangszeit noch an deinen Ava erinnern ;)
  • oh, nee die syntax war schon richtig bei mir, hab nur vergessen da speed hinzuschreiben(also hier im forum)

    Original von TrunX

    GML-Quellcode

    1. if distance_to_point(x,y)>sp
    2. move_towards_point(x,y,sp)



    hm, das macht irgendwie kein sinn, wenn sp = speed = geschwindigkeit ist, weil dan heißt das ja so viel wie: wenn die distanz zu dem punkt P(x/y) größer ist als die geschwindigkeit, dann beweg dich zu dem punkt P(x(y) mit der geschwindigkeit von sp...so versteh ich das jetzt...aber ich glaube nicht dass das so gemeint ist, weil es so nicht funktionieren würde 8|


    Ach und herzlich willkommen zurück in der commu!
    Kann mich aus meiner Anfangszeit noch an deinen Ava erinnern ;)


    hehe, find ich irgendwie klasse :), und danke ;)
    omfg...was hatte ich hier für scheiß signaturen drinne? :D xD

    naja, neue:


    "And in the end, it's not the years in your life that count. It's the life in your years"


    besser :)
  • Macht schon sinn... der bewegt sich dann halt nur bis zu dem/vor dem Punkt. Wenn dann der Speed (sagen wir 5 Pixel/step) groesser ist als die Distanz (sagen wir 1 Pixel), dann soll er halt nicht mehr weiter gehen.

    Aber wenn du willst, dass das Objekt einfach auf einen Punkt gesetzt werden soll, dann schreib doch einfach

    Quellcode

    1. self.x=punktx
    2. self.y=punkty


    (Gibts etwa Programmiersprachen indenen bei Zeilen die nicht sofort ausgeführt werden können, bereits nachfolgende Zeilen ausgeführt werden? Erscheint mir unlogisch... )

    Programmiersprachen fallen mir keine ein, aber Programme mit mehreren Threads... da werden anweisungen auch gleichzeitig ausgefuehrt.
    Zwei kleine Fabeln zum Thema Copyright und Patente:
    Das Schwein und die Kiste und Die Krähe die fliegen konnte
  • Original von Ledif
    (Gibts etwa Programmiersprachen indenen bei Zeilen die nicht sofort ausgeführt werden können, bereits nachfolgende Zeilen ausgeführt werden? Erscheint mir unlogisch... )

    Programmiersprachen fallen mir keine ein, aber Programme mit mehreren Threads... da werden anweisungen auch gleichzeitig ausgefuehrt.
    Hm... das is sehr fraglich inwiefern man da von "gleichzeitig" reden kann.^^
    Das passiert schon hintereinander, aber eben immer alles innerhalb eines - ham ja... vergleichbar mit den Steps im GM.
    Sprich: es wird immer erst berechnet und dann das Ergebnis ausgegeben. Das ganze so schnell, dass es für den Menschen quasi gleichzeitig erscheint.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Bei Threads ist der Vorteil, dass es nicht nacheinander sondern scheinbar gleichzeitig ab. D.h. er wechselt ständig beim Berechnen zwischen den Threads hin und her und berechnet immer kurz was und geht zum nächsten. Schneller wird es dadurch nicht (eher messbar langsamer), aber es ist scheinbar gleichzeitig, also der Prozessor kann mehrere Programme bzw. Aufgaben in einem Programm scheinbar gleichzeitig durchführen.
    Man braucht dann aber schon entweder einen Mehrkernprozessor (Core Duo/Core2Duo, Athlon64 X2), einen Prozessor der Multithreading (Pentium 4 HT) beherrscht oder gleich ein Mehrprozessorsystem um etwas echt gleichzeitig auszuführen. Denn dann können mehrere Prozessoren/Prozessorkerne mehrere Aufgaben echt gleichzeitig berechnen.

    Für den Game Maker ist das aber absolut irrelevant. Der arbeitet die Events nach einem vorgegebenen Schema nacheinander in allem Objekten ab.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • @Kilik:
    Natuerlich kann eine Singlethread CPU (falls es dieses Wort gibt) immer nur eine Anweisung auf einmal ausfuehren, aber die Programmierung ermoeglicht "gleichzeitige" Ablaeufe verschiedener Codes. Zum Beispiel kann man einen thread-prozess (bzw. im GM heisst das ganze ja Skript) laufen lassen, der dann halt die Zeit anzeigt und einen, der einen Ball rendert und diese Funktionen werden nebeneinander geschrieben und ebenfalls nebeneinander ausgefuehrt. Also im einen Takt wird die aktuelle Uhrzeit ermittelt, im naechsten werden die Resourcen fuer den Ball gecacht, dann wird die alte Uhrzeit geloescht, im naechsten Takt werden dann die Ball Resourcen ausgegeben, dann wird die neue Uhrzeit angezeigt, etc.

    Wie Windapple gesagt hat: Dieses Beispiel threaded langsamer sein, als rein imperativ, jedoch wird in der Threadprogrammierung fuer Singlethread CPUs ein anderes Ziel verfolgt:
    Bspw. hast du eine Textverarbeitung, die alle 5 min einen Autosave der Datei erstellt und da der Rechner so alt ist/die Textverarbeitung so neu, brauch man fuer die Speicherung 1min. Jetzt machste den Autosave threaded, damit du waehrend dessen einfach weiter schreiben kannst, ohne was von zu merken. Ich bin mir jetzt nicht ganz sicher ob es ein korrektes Beispiel ist, aber es sollte so eins sein. Es geht halt immer darum, wo man mit dem Warten auf Eingaben oder systemauslastenden Prozessen beschaeftigt ist, die ueberfluessige Leistung zu nutzen mit anderen Aufgaben oder halt die systemauslastenden Hintergrundprozesse zu drosseln um den Nutzer ein schnellere Oberflaeche zu Verfuegung zu stellen.
    Zwei kleine Fabeln zum Thema Copyright und Patente:
    Das Schwein und die Kiste und Die Krähe die fliegen konnte
  • Original von Ledif
    @Kilik:
    Natuerlich kann eine Singlethread CPU (falls es dieses Wort gibt) immer nur eine Anweisung auf einmal ausfuehren, aber die Programmierung ermoeglicht "gleichzeitige" Ablaeufe verschiedener Codes. Zum Beispiel kann man einen thread-prozess (bzw. im GM heisst das ganze ja Skript) laufen lassen, der dann halt die Zeit anzeigt und einen, der einen Ball rendert und diese Funktionen werden nebeneinander geschrieben und ebenfalls nebeneinander ausgefuehrt. Also im einen Takt wird die aktuelle Uhrzeit ermittelt, im naechsten werden die Resourcen fuer den Ball gecacht, dann wird die alte Uhrzeit geloescht, im naechsten Takt werden dann die Ball Resourcen ausgegeben, dann wird die neue Uhrzeit angezeigt, etc.
    Gleichzeitige Abläufe verschiedener Codes sind im GM schon mal Bullshit.
    hast du mal darüber nachgedacht was passieren würde, wenn man eine Variable durch verschiedene Scripts GLEICHZEITIG ändern und abfragen würde?
    Richtig, das geht nämlich gar nicht.
    Der GM macht alles hintereinander, aber eben innerhalb eines Steps.

    Das was du wahrscheinlich meinst ist, wenn größere Vorgänge Via Programmierung auf mehrere Steps aufgeteilt werden, damit nicht der gesamte fette Prozess innerhalb einer 60stel Sekunde ausgeführt werden muss und dadurch die Anwendung zum Stocken bringt.

    Es gilt: Innerhalb eines Steps wird der komplette Code Zeile für Zeile abgearbeitet, die Variablen erhalten ihre Werte, dann werden diese in Form von Grafik (und Ton) ausgegeben, und die ganze rechnerei geht von vorne los. das ganze x Mal pro Sekunde, dass es so aussieht als würden y Prozesse Parallel laufen.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Ach... vom Gamemaker rede ich doch gar nicht, zumal ich bezweifle, dass der GM so etwas bietet. Dass man nicht gleichzeitig zwei verschiedene Operationen auf ein und den selben Speicherinhalt anwenden kann, sollte klar sein und hat auch so niemand behauptet.

    Ich meine keine Verteilung eines Prozesses auf mehrere Steps, sondern Threads ;)
    de.wikipedia.org/wiki/Thread_%28Informatik%29

    Wozu denkst du waeren Multicore CPUs gut, wenn sie weiterhin immer einen Takt nach dem anderen ausfuehren wuerden? Wie gesagt... vom GM sprech ich nicht.

    Aber nochmal zum eigentlichen Zitat:
    (Gibts etwa Programmiersprachen indenen bei Zeilen die nicht sofort ausgeführt werden können, bereits nachfolgende Zeilen ausgeführt werden? Erscheint mir unlogisch... )

    Mir faellt gerade ein, dass du bspw. bei einigen Standard Ein- und Ausgaberoutinen in C/C++ du einstellen kannst, ob die Funktion blockieren soll... also man kann einstellen, ob bei einer erwarteten Eingabe das Programm gestoppt wird bis jemand was eingibt oder ob es schauen soll, ob eine Taste gedrueckt wurde und wenn nicht, einfach weiter laeuft.
    Zwei kleine Fabeln zum Thema Copyright und Patente:
    Das Schwein und die Kiste und Die Krähe die fliegen konnte
  • Benutzer online 1

    1 Besucher