kostenloser Webspace werbefrei: lima-city


Werte neu deklarieren nach RotateTransform C#

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    schinkenmedia

    Kostenloser Webspace von schinkenmedia

    schinkenmedia hat kostenlosen Webspace.

    Guten Abend,

    ich arbeite derzeit an einem kleinen Jump&Run in C# (WPF). Als Plattformen verwende ich Rectangles und blockiere an den Seiten die Bewegung (je nach Seite nach links und nach rechts), sowie die Höhe (landung auf den Rectangles), bzw. das der Spieler von unten nicht durch die Rectangles nach oben springen kann.

    Soweit, so gut. Nun möchte ich als Levelelement einen Balken drehen:

    RotateTransform Balkendreh = new RotateTransform(30);
                            rec1.RenderTransform = Balkendreh;



    Das Problem: Die Werte werden nicht übernommen, und der Spieler kollidiert mit dem unsichtbaren Rectangle welches in der Luft schwebt, während das geneigte ignoriert wird. Man kann also davon ausgehen, dass die Rotation rein visuell ist und Werte wie rec1.height; rec1.width; GetTop und GetLeft nach wie vor sind und somit die "Hitbox" wie immer ist.

    Ich habe mal eine professionelle Zeichnung des Problemes gemacht:
    http://www.fotos-hochladen.net/uploads/problemd7olqzwme3.png

    Nun meine Frage: Kann ich die Werte nach einer RenderTransformation so anpassen, dass er auch in einer Neigung den neuen Höhenwert und den Seitenwert erkennt und die Felder (sind doch Felder, oder?) Height, Width, GetTop und GetLeft neu deklariert werden? D.H. dass z.B. beim Höhenwert Pixel für Pixel automatisch berechnet wird das es jetzt etwas tiefer / höher (je nach Winkel) geht, als im Pixel zuvor?

    Beitrag zuletzt geändert: 8.5.2014 17:47:28 von schinkenmedia
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ja, du gehst richtig davon aus, die Werte sind rein visuell. Anhand der Kantenlängen deines Rechtecks errechnet er das teil, manipulierst du sie, dann ändert sich auch die Größe des errechneten Quadrats, welches du über den Winkel verschoben hast. genau so wie es sich auch in JavaScript verhält. Da ich selbst mit grafik noch ncihts zu tun habe, fielen mir nur 4 Optionen ein, die du hättest:

    1.) du programmierst deine eigene Rotate-Klasse, welche die Eckpunkte des übergebenen Objektes Mitschleift und das Polygon mitschleift

    2.) du baust eine Matrix drunter, für die Kollisionserkennung, welche unabhängig von der grafik funktioniert

    3.) du hälst ausschau nach einer Klasse, die dir das ding nicht transformiert, sondern quasi verschiebt

    4.) du lässt das Teil optisch rotieren und tauscht es nach erfolgter Rotation durch ein deckungsgleiches Element aus, dessen Eckpunkte richtig sitzen


    Falls es nciht all zu eilig ist, würd ich noch abwarten, bis sich jemand meldet, der damit schonmal gearbeitet hat und eine banalere Lösung findet für dein problem...
  4. Autor dieses Themas

    schinkenmedia

    Kostenloser Webspace von schinkenmedia

    schinkenmedia hat kostenlosen Webspace.

    Das sind vier gute Ansätze, und bei jedem kann ich noch was dazu lernen. :) Nein, eilig ist es nicht, zudem ist es auch nicht nur für ein Jump&Run gut sondern auch so mal interessant. Danke für deine Antwort :D
  5. Erst einmal solltest du die Position der Ecken nicht an dem Rectangle definieren, sondern dort, wo sie sich tatsächlich befinden. Wenn du eine schräge rotierst, solltest du berechnen, wo sich die Ecken nach der Rotation befinden (dazu könntest du zB eine Klasse von deinem Rectangle ableiten, mit den Entsprechenden Membern für die Koordinaten. Ggf. noch ein Listener der mitbekommt, wenn das Objekt gedreht wird und eine Methode, welche dir dann die neuen Koordinaten berechnet und vom Listener aufgerufen wird). Wenn du zB eine eigene Engine schreiben würdest, würdest du nicht das Rechteck zeichnen sondern die Striche entsprechend von Koordinate zu Koordinate und hättest dann schon die Position der Ecken. Wäre vielleicht auch eine Überlegung, das so zu realisieren.

    Hast du nun die Position der Ecken, kannst du herausfinden, ob sich ein Punkt innerhalb dieses Rechtsecks befindet. Eine Formel dazu lässt sich mit Sicherheit über Google finden. Der "Punkt" wäre dann jeweils eine Ecke deiner Spielfigur (oder etwas darüber bzw. darunter). Diese Punkte hast du natürlich über die Position auf dem Schirm im Programm und der Größe der Figur.

    Beitrag zuletzt geändert: 9.5.2014 16:05:31 von falseweb
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!