Mausposition abfragen und zur Positionierung eines Objekts benutzen.

  • #10, by MachtnixSunday, 20. December 2015, 20:23 9 years ago
    Ah, du hast eine Funktion draus gemacht und die kann man dann abrufen. Hört sich gut an. Offensichtlich wird bei mir einfach immer nur dieselbe Anfangsposition ausgegeben und die scheint irgendwie fixiert zu sein (warum? keine Ahnung). Nein ich habe den Log mit print log immer neu aufgerufen und es war auch immer nur eine Seite, nix zum Scrollen.
    Ich finde, es fehlt hier einfach eine einführende und brauchbare Dokumentation. Lua zu lernen bringt mich nicht weiter, weil es hier ja um das interne Visionaire-Objekt-Konzept geht, was ich natürlich in keinem Lua-Buch finden werde...

    getPoint scheint ja ein echtes Ergebnis auzugeben, nur leider immer nur 0 0. Entweder beziehen sich die Koordinaten auf den Kulissen-Nullpunkt (da liegt der Charakter aber nicht) oder auf ein übergeordnetes Objekt, wie ich es aus Cinem4d kenne: alle untergeordneten Objekte beziehen sich auf das Mutterobjekt und sind relativ

    Vielen Dank für Deine Aufdröselung. Nach der Logik würde ich ja schreiben: getObject (Name) -> setPosition (Name). Aber sowas gibt es wohl nicht...

    Das mit den Sprites erschwert die Sache. Im Editor habe ich schnell gemerkt, dass ich zwar das Objekt verschieben kann, dessen Darstellung (Bild oder Ani, also Sprites) aber nicht hinterherkommt. Ich muss immer zwei Werte synchron ändern. Immerhin sieht der Spieler ja das Bild vom Objekt, die wirkliche Position des Objekts ist ihm herzlich egal...

    edit:
    Ich mach mir mal n paar gedanken zu der positionierung des Chars zum Cursor.
    Soll das "direkt" geschehen (teleport) oder dorthinbewegt werden (also der char soll dahin gehen)?
    Naja, die Plazierung des vermeintlichen Charakters ist nur der Fake, damit sich der Geschützturm nach ihm ausrichtet. Darum geht es ja die ganze Zeit. Der sogenannte Charakter ist nur dazu da, um nur das zu ermöglichen. Er besteht aus rein gar nichts. Ich könnte dasselbe ebensogut mit einem Objekt machen. Deshalb am liebsten sofortige Ausrichtung. Da das wahrscheinlich zu einer Endlosschleife führt, war vorgesehen: Plaziere Charakter auf Mausposition -> 20ms Pause -> Plaziere Charakter auf Mausposition usw.

    Machtnix

    Thread Captain

    1097 Posts


  • #11, by sebastianSunday, 20. December 2015, 21:35 9 years ago
    AAaaaaahh ich verstehe nun, warum das bei dir nicht geklappt hat mit dem Cursor... Das script lief direkt am Anfang ab und fertig, da es in keiner Funktion war. Wenn du den Log ausgibst, siehst du immer nur das aus was zuletzt geschehen ist.
    Ausgabe des Logs lässt aber deine Scripte nicht neu ablaufen (wäre ja auch dämlich).
    ---
    setPosition geht/gibts leider nicht. Hier müsste man mit setValue arbeiten und dann VcharacterPosition setzen (siehe setValue unter http://wiki.visionaire-tracker.net/wiki/Scripting)

    Hier gibt es sogar ein Beispiel um die position eines Characters zu ändern:
     -- set character "Tom" to position x(100), y(300)
     local tom = getObject("Characters[Tom]")
     tom:setValue(VCharacterPosition, {x=100,y=300})
    

    anstatt "100" und "300" wäre hier die variable x und y zuverwenden... (x=x, y=y)
    wobei ich hier vllt die cursorvariablen eindeutiger benennen würde...

    Thread Captain

    2346 Posts

  • #12, by MachtnixTuesday, 22. December 2015, 17:24 9 years ago
    Hallo, hier bin ich wieder. Danke für Deinen Tipp.
    Allerdings bin ich inzwischen selbst drauf gekommen... ;-) Hab die Stelle auch gefunden. Hier mein Script:

    x = (getCursorPos().x + game.ScrollPosition.x)
    y = (getCursorPos().y + game.ScrollPosition.y)
    
    print("Mausposition", x, y)
    
    SchussrichtungObjekt = getObject("Objects[Ziel]") 
    SchussrichtungPosition = getObject("Objects[Ziel]"):getPoint(VObjectPosition)
    
    print ("Ziel",SchussrichtungPosition.x, SchussrichtungPosition.y) 
    
    SchussrichtungPosition.x = x
    SchussrichtungPosition.y = y
    
    print ("Ziel gleich Mausposition", SchussrichtungPosition.x, SchussrichtungPosition.y) 
    
    [b]SchussrichtungObjekt:setValue(VObjectPosition, {x=SchussrichtungPosition.x, y=SchussrichtungPosition.y})[/b]
    

    Print ist natürlich nur zur Kontrolle und wird geloscht. Warum nun die geschweiften Klammern sein müssen, weiß ich nicht. Ich übernehme das so. Das ist eben das Dumme, dass ich keine Ahnung von der Syntax habe und einfach nur klaue, was da ist, ohne die Hintergründe wirklich zu verstehen...

    So sieht's bislang aus:
    http://vimeo.com/149772155

    Jetzt versuche ich mit dem IsInRadius-Script klarzukommen, um die Treffer zu zählen. Bislang habe ich es mit Mausaktion gemacht, was aber unbefriedigend ist.

    Machntix

    Thread Captain

    1097 Posts

  • #13, by sebastianTuesday, 22. December 2015, 19:15 9 years ago
    Viel Erfolg smile

    Thread Captain

    2346 Posts

  • #14, by MachtnixTuesday, 22. December 2015, 20:10 9 years ago
    Danke.
    Im Moment knabbere ich gerade daran, ob Werte und Bedingungen, die im Vis-Editor angelegt werden, in einem Lua-Script abgefragt werden können und umgekehrt. Lege ich im Lua-Script z.B. die Variable "Treffer = 0" an, taucht das im Editor nicht auf. Denn alle Werte aus dem Editor existieren bislang nur im Editor, und alle Werte im Script gibt es nur im Script und werden auch nur dort verarbeitet. Irgendwie gibt es keine Tür zwischen den beiden Welten außer eben den wenigen getObject-Abfragen und noch ein paar andere.
    Ich glaube, das ist gerade mein Hauptproblem. Im IsInRadius-Script erlaubt mir die if-else-Abfrage zwar, im Code mit "do sth" und "do sth else" weiterzuarbeiten, aber nicht, von dort aus Einfluss auf den Editor zu nehmen. Ich muss also sämtliche Aktionen, die ich normalerweise im Editor "mal eben" anlege, mir im Script mühsam per Lua erarbeiten, also z.B. "starte Animation x von Objekt y"o.ä....

    Machtnix..

    Thread Captain

    1097 Posts

  • #15, by sebastianTuesday, 22. December 2015, 20:41 9 years ago
    Dies ist eine kurze Schreibweisen und auch nicht getestet.
    Sollten aber das ganze getObject-Zeug für dich vereinfachen in diesem Fall. Wichtig ist, dass die Value/Condition Bezeichnung nur 1x vorkommt im Spiel

    Conditions:
    Eine VIS Condition "item_used" auf true oder false setzen per Lua:
    Conditions["item_used"].ConditionValue = false
    Conditions["item_used"].ConditionValue = true
    


    Values

    Wert einer VIS Value per LUA ändern (10/test)
    Values["items_used"].ValueInt = 10
    Values["item_name"].ValueString = test
    




    Anders herum kannst du am besten die ExecuteScript Actionparts nutzen.

    Thread Captain

    2346 Posts

  • #16, by sebastianSaturday, 26. December 2015, 11:38 9 years ago
    achso, was deinem meteor-schuss angeht:
    Meinst du nicht, dass es komisch ist, dass der Meteor
    A: immer nur bis zum Zielkreuz fliegt und nicht darüber hinaus und dadurch
    B: die geschwindigkeit des schusses immer gleich ist, obwohl sich die strecke ändert?

    Müsstest du hier nicht (mit Lua) die Flugbahn berechnen und weiter fliegen lassen?

    Thread Captain

    2346 Posts

  • #17, by MachtnixSaturday, 26. December 2015, 18:18 9 years ago
    Mit Lua ist mir das zu kompliziert. Mein Schuss "blendet" sich inzwischen in einer Animation einfach aus (ist nun eher ein Feuerball), deshalb fällt es nicht auf, bis wohin er genau reicht... Wenn ich erstmal hinbekommen habe, die Mauscursorposition des Ziels abzufragen, kann ich das ja dazu verwenden. Zur Zeit habe ich größere Probleme damit, die Vernichtung eines Objekts nach drei Treffern einzuleiten, weil der linke Mausklick ja "global" gezählt wird. Wahrscheinlich muss ich sowieso wieder alles ganz anders aufbauen...

    Frohes Weihnachtsfest!

    Machtnix

    Thread Captain

    1097 Posts