Isometrische Ansicht.

  • GM 7
  • Isometrische Ansicht.

    Hi leute. hab da mal ne frage. Und zwar hab ich ne alte RTS engine aus gekramt. Sowas wie Starcraft. nur einfacher.
    So und nun hab ich mal versucht mit meinem 3d Animation Programm Isometriche sprites zu erstellen. klapt auch.
    So und nun ist die frage wie man die recht gut ins spiel rein bekommt. für die richtung.

    Das das mit image_singel=direction*image_number/360 ghéht weis ich ja schon. und wie das alles geht. Das ist nicht das Problem.
    Hir mal meine Test einheit. Rotation in Iso (5 grad pro step)


    Es gibt nur ein Problem.
    Die Direction kann man nicht 1 zu 1 übernehemen von Topdown zu Iso.
    Da ein 45 Grad winkel von oben anders ausschaut als in Iso.
    Hier mal ein Beispiel.

    Wie kann man das relativ leicht umgehen. Da rein optisch in der Iso Perspektive, der 45grad winkel ehr einem 30 grad winkel entspricht, kann man aber also keinen 45 grad winkel Iso Sprite zutzen.
    da das nicht 1 zu 1 past.
    Wie könnet ich es dann errechnen das ich wenn er bei (Topdown 30 grad) ist, den (Iso 45 grad) Sprite nimmt.

    Hoffe ihr versteht was ich meine.
    ps. sind ca 72 bilder für eine 360 grad drehung.

    Iso 45 WInkel Sprite. Realer winkel ist aber ca 30 grad. Da kommt es dann zu konflikten mit der Formel oben.

    Hab hier nco hwas, was einem dabei weiter helfen kann.
    Bilder
    • tank_test.gif

      85,68 kB, 64×64, 500 mal angesehen
    • iso_50.PNG

      1,16 kB, 64×64, 518 mal angesehen
    Meine Signatur hat kein Visum für das GM Forum erhalten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von x-sascha ()

  • Soweit war ich auch schon. das funktioniert nur teilweise. Denn wenn dan die Diretion zb 85 ist. komm dann schon der Sprite für ca 100 grad.
    bzw wenn man nach rechts fährt (also o) wird schon der sprite für +15 dargestellt.

    Also ich bin bis jetzt etwas näher gekommen. Das muss Prozetual aus gerechent werden. für diverse Winkel bereiche. 0-45,45-90,90-135 usw.
    da hab ich versucht.

    GML-Quellcode

    1. if direction<45 and direction>=0 then in_dif=((direction)/100)*33.3
    2. in=(direction+15)*image_number/360

    rechten 33,3% von der Differenz der direction zu 45 aus und addiert sie später dann dazu.
    zb direction = 10
    (45-10)=35
    35/100*33.3=11.6 nochwas.
    finale direction für densprite also. 21.6 nochwas.
    dieser wert änmdert sich stätig da er prozentual ist.

    Klapt sowiet ganz gut. nur bei den geraden richtung wie links rechts oben unten spint es dann wieder.
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • das hab ich mir auch schon überlegt. Doch bei einer mauss steuerung wird man kaum die 0 oder 90 genau treffen. darum wird es auf ziemlich viel if anweisungen hinaus laufen.
    Kann ja auch passieren das man einen winkel von 0.58 erwischt. Was dann. mann müste dann sehr viele Bereiche im Kreis eingenzen. Bin gerade dabei das zu testen.

    Hier habt ihr was zum Thema Isometrie
    Meine Signatur hat kein Visum für das GM Forum erhalten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von x-sascha ()

  • Lässt sich bestimmt noch optimieren, aber das sollte gehen:

    GML-Quellcode

    1. var xx,yy;
    2. xx = lengthdir_x(100,richtung);
    3. yy = lengthdir_y(100,richtung)/2;
    4. richtung_iso = point_direction(0,0,xx,yy);
    5. // richtung = Richtungsvariable
    6. // richtung_iso = Anzeige-/Bewegungsrichtung

    Ich verkürze in dem Beispiel den y-Abstand um die Hälfte.
    Wenn ich mich nicht irre, ist es das, was Isometrisch ausmacht. ^^
  • Nachbearbeitung thx copyboy
    var xx,yy;
    xx = lengthdir_x(100,richtung);
    yy = lengthdir_y(100,richtung)/2;
    richtung_iso = point_direction(0,0,xx,yy);

    muss nur etwas geändert werden. Dann klapt es doch ganz gut. thx noch mal.
    var xx,yy;
    xx = lengthdir_x(100,direction);
    yy = lengthdir_y(100,direction)*1.59
    richtung_iso = point_direction(0,0,xx,yy);
    image_singel=richtung_iso*image_number/360

    Hab mir mal nen wert errechent der da rein past. frag mich nicht warum aber past.
    den 45*0,59 grad real sind dann in Iso die 26,.....
    Hatte auch nicht geklapt. Dann hab ich 1.59 draus gemacht und es funst zu 95% ziemlich genau die aus richtung.

    ps hab das prinzip erst nich verstanden. aber du errechnest mit der funktion einen ziel punkt in richtung der aktuellen direction (fahrtrichtung)



    Meine Signatur hat kein Visum für das GM Forum erhalten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von x-sascha ()

  • Hab das jetzt nicht alles gelesen, aber kann es sein, dass du einen exakteren Wert erhälst, wenn du statt "1.59" einfach pi/2 nimmst?
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Ja stimmt hast recht. sieht noch eintick besser aus( kommt mir zumindesten so vor. Hab es nicht so mit Pi. Darum bin ich auch nicht auf die Variante gekommen die mir oben geposted wurde.
    Danke für diese anmerkung.
    Meine Signatur hat kein Visum für das GM Forum erhalten.