fixer punkt auf gedrehten sprites

  • fixer punkt auf gedrehten sprites

    für mein spiel wollte ich objekte einbauen die immer an einer bestimmten stelle eines gedrehten sprites fixiert sind... in einem anderen thread hier, fand ich so was in der art:

    GML-Quellcode

    1. disx=-30;
    2. disy=-5;
    3. x2 = self.x+disx*cos(degtorad(direction));
    4. y2 = self.y-disy*sin(degtorad(direction));

    jedoch funktioniert dieses gml-fetzelchen nur sehr ungenau. der punkt verschiebt sich ständig, wenn sich das sprite dreht. kann mir jemand sagen, was ich falsch gemacht hab? oder noch besser, mir schritt für schritt genau vorkauen, wie's richtig geht? :D

    heavy thanks schon im voraus.
    Bilder
    • pixixix.jpg

      10,83 kB, 156×168, 390 mal angesehen
    PUTREFACTION ////
    ◇ ALIEN BASTARDS ◇ SLY PITCH ◇ SHOVE MASTER ◇

  • Jaja, die gute alte Sin/Cos rechnung. Schaun ma mal, das Problem hab ich schon in einigen meiner Programme gelöst, allen vorran dem 2D Mesh Editor.

    Also folgende variablen:

    Obj_x -> X Koordinate des Objekts
    Obj_y -> Y Koordinate des Objekts
    OffSet_X -> Offset Koordinate des 2ten Objektes, relativ zum 1ten Objekt, bei 0° drehung.
    OffSet_Y -> siehe oben :3
    New_X -> Fertige Koordinat mit Drehung
    New_Y -> ...

    GML-Quellcode

    1. {
    2. New_X = Obj_x + (OffSet_X*cos(degtorad(direction)) - OffSet_Y*sin(degtorad(direction)))
    3. New_Y = Obj_y + (OffSet_X*sin(degtorad(direction)) + OffSet_Y*cos(degtorad(direction)))
    4. }
    ...
  • gründlichsten dank, shoba. aber das will so auch nicht funktionieren... entweder sind alle lösungsvorschläge falsch, oder ich bin zu blöd, die zwei zeilchen korrekt einzubauen... an was liegts? jaja an mir...*seuftz*

    ich habs jetzt so drinn:

    ich hab nun 3 objekte. ein sagen wir mal trägerobjekt, das einem pfad folgt. dann haben wir das wingobjekt. das mit dem original origin an das trägerobjekt gekoppelt ist (bzw immer folgt) und sich dabei gelegentlich um seine achse dreht. dann objekt nummer drei, ein punkt. er soll an einer bestimmten stelle des wingobjektes bleiben bzw. mitgehen...

    im stepevent des punktobjektes:
    New_X = obj_boss_wing_l.x + (60*cos(degtorad(direction)) - 5*sin(degtorad(direction)))
    New_Y = obj_boss_wing_l.y + (60*sin(degtorad(direction)) + 5*cos(degtorad(direction)))

    wobei obj_boss_wing_l das wingobjekt ist. dann hab ich die New_X und Y koordinaten im selben stepevent als neue koordinaten des objekts drinn...

    aber der olle punkt passt sich zwar der entfernung zum wingobjekt an, dreht sich aber nicht mit...
    PUTREFACTION ////
    ◇ ALIEN BASTARDS ◇ SLY PITCH ◇ SHOVE MASTER ◇

  • ich weiss jetzt nicht, an was es lag, aber ich habs jetzt wie im tutorial gemacht, dass das "trägerobjekt" die ganze sache steuert. ich hätte es ja von dem objekt aus machen wollen, das sich an die richtige stelle anpassen muss... naja, auch gut so. hauptsache es funktioniert. ^^ jetzt steht der veröffentlichung nicht mehr viel im wege...

    thanks

    *gg* am besten gleich n sticky aus dem thread machen, weil mich dünkt, dass diese cosinus/sinus formel noch recht häufig gebraucht werden kann.. ;)
    PUTREFACTION ////
    ◇ ALIEN BASTARDS ◇ SLY PITCH ◇ SHOVE MASTER ◇

  • @Belial: Das glaub ich allerdings auch! Sowas ist ganz gut zu gebrauchen.. Nice work, shoba!
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Anmerkung der Redaktion :3

    Wenn ihr öfters auf Sinus und Cosinus Funktionen zurückgreift, solltet ihr vielleicht eine Lookup Table erstellen. Das sind im endeffekt 2 Arrays von 0 - 359, welche die Ergebnisse der Sinus und Cosinus Funktionen beinhalten. Damit erspart ihr euch nicht nur die sinus und Cosinus Funktionen, sonder könnt auch DegToRad ignorieren. Ist nur leider nicht ganz so genau, weil es 4.6 Grad z.b. als 5 Grad behandelt.
    ...
  • Benutzer online 1

    1 Besucher