Not logged inOpenClonk Forum
Up Topic Community / German / Problem bezüglich Actions/ActMap
- - By ClonkGeist [de] Date 2012-02-01 21:25
Also, ich habe hier zwei Objekte. Ein Objekt hat folgende ActMap:
local ActMap = {
Blah = {
        Prototype = Action,
        Name = "Blah",
        Procedure = FLOAT,
        NextAction = "Blah",
        FacetBase = 1,
        Length = 1,
        Delay = 1,
        StartCall = "Foo",
},
};

Das andere Objekt hat folgende ActMap:

local ActMap = {
Blah2 = {
        Prototype = Action,
        Name = "Blah2",
        Procedure = DFA_FLOAT,
        NextAction = "Blah2",
        X = 0,
        Y = 0,
        Wdt = 20,
        Hgt = 100,
        Length = 1,
        Delay = 1,
        StartCall = "Bar",
},
};


Erstens eine Frage: Was ist der Unterschied zwischen "DFA_FLOAT" und "FLOAT"? (DFA_FLOAT habe ich jetzt einfach mal vom Beispiel der ActMap-Seite in der Doku genommen.)

Und nun zum eigentlichen Problem: Also, das erste Objekt funktioniert super. Es zeigt die Grafik richtig an und wird mit SetXDir/SetYDir weggeschleudert. Beim zweiten Objekt ist es nur so, dass wenn die Prozedur = FLOAT ist, die X- und Y-Geschwindigkeit richtig ist, aber die Aktion dann plötzlich "Idle" ist. Bei DFA_FLOAT ist die Aktion dann immer "Blah2", aber die X- und Y-Geschwindigkeit sind immer = 0. Es wäre schön, wenn die Aktion bleibt und die X- und Y-Geschwindigkeit auch. Im Script hab ich auch nachgeschaut, ob irgendwo die Aktion / Geschwindigkeit zurückgesetzt wird. Wird allerdings beides nicht.  Und wenn dem so wäre, dann würde das doch *eigentlich* in beiden Fällen auftreten?
Reply
Parent - - By Zapper [de] Date 2012-02-01 21:45
Ich kann dir zwar nicht die Frage nach FLOAT versus DFA_FLOAT beantworten, weil ich eigentlich gesagt haette, dass FLOAT garnicht mehr funktioniert.

Aber eine Sache hat sich seit Clonk Rage noch geändert. Versuch mal nachdem du die Action im Objekt gesetzt hast, SetComDir(COMD_None) aufzurufen.
Ich glaube COMD_Stop ist Standard - und das blockiert Bewegungen (bei einer FLOAT-Aktion).
Aber komisch, dass die Aktion dann irgendwann "Idle" ist
..vielleicht ist das auch der Grund warum das erste geht? Vielleicht wird die Aktion einfach nicht gesetzt, weil ungültige Prozedur?
Parent - By ClonkGeist [de] Date 2012-02-01 21:53

>..vielleicht ist das auch der Grund warum das erste geht? Vielleicht wird die Aktion einfach nicht gesetzt, weil ungültige Prozedur?


Ja, das habe ich nun vor ein paar Sekunden auch bemerkt. Der Punkt war einfach nur, dass in der Funkion im StartCall Sachen drin waren, die ich überhaupt nicht bemerken konnte. Fiel mir eben auch ein dass es so sein könnte und ja, es ist wohl so. Da könnte es vielleicht helfen, wenn die Prozedurliste in der Doku mal überarbeitet wird? (Mit dem COMD_None Hinweis)

Ansonsten: Ja, mit COMD_None funktionierts nun, Danke.
Reply
Parent - By Günther [de] Date 2012-02-02 02:18

> Was ist der Unterschied zwischen "DFA_FLOAT" und "FLOAT"?


Für ein wenig Erhellung, siehe System.ocg/C4.c

Die „DFA_*”-Konstanten waren mal Integer - einfach weil sie in der Engine immer schon Integer waren. Später wurde es dann einfacher, sie als Strings zu implementieren, und es ist netter, wenn GetProcedure() nicht Integer in Strings umwandeln muss und alles einheitlich ist. Zum Glück konnte ich einfach die Konstanten ändern statt alle Scripts. Es ist aber äußerst unwahrscheinlich, dass sich der Wert der Konstanten nochmal ändert, also kann man jetzt einfach „"FLOAT"” statt „DFA_FLOAT” schreiben.

Was „FLOAT” ist, weiß ich allerdings nicht.
Reply
Up Topic Community / German / Problem bezüglich Actions/ActMap

Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill