Berechnung der Position eines "Pixels" auf einem Sprite bei Drehung des Sprites

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Berechnung der Position eines "Pixels" auf einem Sprite bei Drehung des Sprites

    Huhu,
    ich habe ein Problem. Ich steh aufm Schlauch. Ich dachte zuerst mit lengthdir und so kein Problem aber beim genaueren hinsehen stellte sich heraus dass das nicht ist was ich brauche :/

    Ich will z.b. die Koordinaten eines bestimmten Pixels auf einem Sprite mit beliebigem Origin bestimmen.
    Aber das schwierige dabei, ich will die Koordinaten des Pixels auch genau und korrekt bestimmen wenn ich das Sprite um seinen Origin drehe und/oder spiegel.

    Z.b. von diesem Kopf das rechte Auge:


    Im zweiten Teil des Sprites sieht man 1. den Origin des Sprites (ausgefüllter Kreis) und die von mir bestimmte Koordinate des Auges (diese ist korrekt solang sich weder image_xscale noch rotation ändern)
    Dreh ich das Sprite verschiebt sich die errechnete Koordinate und ist nicht mehr was ich will :(
    Und wenn sich das Sprite auch noch spiegelt funktioniert gar nix mehr. Hab bereits diverse Versuche hinter mir, alle mit ähnlichen Ergebnissen, mal bisschen besser mal bisschen schlechter aber nie 100%ig.

    Also, wie bestimm ich die zuverlässig?

    Gegen hab ich das Sprite mit allen Eigenschaften des Sprites (origin, image_scale, image_angle usw.) und natürlich den Offset der zu suchenden relativen Position.
    In diesem Fall sind die relativen Koordinaten:
    x = 1
    y = -4

    Denn ist das Sprite nicht ausgelenkt befindet sich das Auge 4 Pixel nach oben und einen nach rechts.

    Kann mir er mit einer Formel weiterhelfen? Danke!
    Ich bin auf eure Lösungsansätze/wege gespannt. Wie würdet ihr das lösen?!

    Edit: Zudem ist mir aufgefallen dass das Origin, also die Position an dem ich das Sprite drawe irgendwie komisch is. Denn ich zeichne das Sprite im Beispiel an x,y und ebenfalls an x,y zeichne ich den Kreis.
    Aber wenn ich das Sprite nun drehe scheint es nicht wirklich um exakt diese Position sich zu drehen sondern etwas versetzt!? Sehr merkwürdig.
    Sorm ist Schuld

    Edit: Doch ist er
  • Ich glaube du musst:

    GML-Quellcode

    1. var dir = point_direction(0,0,1,-4); // wegen dem offset des origins
    2. var length = ? //die point distance zwischen dem sprite origin und dem auge
    3. auge_x = x + lengthdir_x(length, dir + image_angle);
    4. auge_y = y + lengthdir_y(length, dir + image_angle);


    machen, habs aber nicht getestet.

    edit: bei spieleglung weiß ich auch grad nicht

    edit2: habs getestet du machst:

    GML-Quellcode

    1. var dir = point_direction(origin,origin, augen position,augen position);
    2. var length = point_distance(origin,origin, augen position,augen position);
    3. auge_x = x + lengthdir_x(length, dir + image_angle);
    4. auge_y = y + lengthdir_y(length, dir + image_angle);


    Dabei geht sdu am besten so vor, dass du das Origin des Kopfes auf das Auge setzt, dann kennst die die AUgenposition. Und dann setzt du ihn wieder auf den Hals oder sonst wo hin und schriebst du den Code.

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

  • das ist exakt das was im beispiel verwendet wird. Und es führt wie man sieht nicht zum gewünschten Ergebnis.

    Edit:
    Deinen Edit verstehe ich nicht ganz....moment. Was fürn Wert soll denn origin haben?
    Und den Origin des Sprites ändern? Das ist keine gute Lösung. Der Origin soll ganze Zeit so bleiben wie er ist. Das is ja der Witz dabei. Das Sprite dreht sich um den Origin und ich will eine relative Position abhängig davon.
    So wie es eigentlich logisch wäre (ca. dein erstes Beispiel) geht es nicht, deswegen brauch ich eure Hilfe.


    EDIT:
    Scheinbar ists so wies logisch ist doch korrekt, man muss nur nochmal +1 bei x und y rechnen, dann verschiebt sichs nich mehr
    Sorm ist Schuld

    Edit: Doch ist er

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Pacmangamer ()