Textur bei Bewegung mal scharf und mal unscharf

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

    • Textur bei Bewegung mal scharf und mal unscharf

      Hallo,

      ich habe eine 2D-Textur, welche ich mit Up, Down, Left und Right um einen Wert bewege, der (float)speed * (float)gametime.totalseconds entspricht und daher eine Kommazahl ist, doch genau dies ist mein Problem, denn wenn ich speed auf 1.0f setze und die gametime rauslasse, sodass bei der Position nur ganze Zahlen erscheinen, dann geht es wunderbar, sobald ich jedoch z.B. wieder 0.8f als speed nehme, dann wird meine 2D-Textur mal scharf und mal unscharf beim bewegen.

      Ich möchte jedoch ungerne mit ganzzahligen Variablen (in meinem Fall dann der Typ byte) arbeiten, da, um es zu verdeutlichen, 1 zu wenig und 2 zu viel speed wäre.

      Ich bin am verzweifeln und würde mich über eure Ratschläge freuen.

      Danke im Voraus
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Du benutzt gameTime.ElapsedGameTime.TotalSeconds, stimmts?
      Wenn ja, dann solltest du das auch weiterhin benutzen, wenn du wirklich auf allen Maschinen gleichschnelles Updaten von deiner Textur haben willst.
      Dein Problem hab ich jetzt noch nicht wirklich beobachtet, kann auch nur ein Effekt sein, der entsteht, da die Textur ja immer wieder bewegt wird pro Frame um ein kleines Stück.
      Aber da es ja mit ganzzahligen Werten geht, ist das eigentlich nicht normal.

      Leider kann ich dir nicht helfen im Moment, haste mal etwas Quellcode für mich?
      Evtl kann mans dann so sehen, woran es liegt.
    • Danke erstmal für die Antwort.

      Ja ich benutze die Variable gameTime, aus dem Grund, den du genannt hast und würde auch, wie in meinem Beitrag beschrieben, ungerne auf diese verzichten.

      Ich habe eine Vermutung, warum das Bild so verzerrt wird:
      Die Texture2D wird ja in Pixel angezeigt und auch der Monitor rechnet in Pixel, wenn ich nun ein Bild um 0,4 Pixel verschieben möchte, dann geht dies nicht unbedingt, denn wie gesagt, berechnet der Computer immer volle Pixel.

      Nun macht der Computer folgendes, um doch das Bild um einen Bruchteil eines Pixels zu verschieben:
      Er errechnen nun die Differenz der potentiell benutzen Pixel und entscheidet, welcher Pixel nun dichter am vorherigen benutzten Pixel ist und benutzt diesen dann. Da aber die Pixelpositionen pro Pixel anders sind, legt er manche Pixel einen Pixel weiter als zuvor und einer bleibt auf seiner Position, während ein anderer wiederum 2 Pixel springt und dadurch wird das Bild unscharf...

      So meine Vermutung, falls das nicht zu verwirrend war :D


      Nun müsste mir nur eine andere Methode einfallen... Tut es aber leider nicht... Vielleicht fällt euch dazu ja eine passende Anpassung oder ein anderer Weg ein.

      Ich habe mal ein Beispielprojekt erstellt, damit ihr das Ergebnis selber sehen könnt:

      (XNA 4.0)
      MEGAUPLOAD - The leading online storage and file delivery service

      Habe dort 2 Texturen eingebettet,
      bei der einen sieht mans nicht so stark und bei der anderen stark.

      Gewechselt werden kann es in der Draw-Methode.

      Danke im Voraus
    • So, habs mir mal angesehn und ich muss sagen, dass ist ein fall, den ich selbst noch nicht erlebt habe.
      Ich hab grad echt keine Erklärung dafür, wieso es so ist.
      Was du ja mit deiner Variable position bestimmst, ist nur die Position des Origins, also standardmäßig die Position der linken oberen Ecke des Sprites.
      Vielleicht liegt es wirklich an der Art der Bewegung, aber normalerweise sollte das nicht so sein, da man sonst ja keine ordentliche Bewegung hinbekommt.

      Mal sehen, ob ich irgendwie auf die Problemlösung komme.
    • Danke für eure Antworten.

      Ich hatte "heute" bzw. gestern leider keine Zeit das Problem weiter auf den Grund zu gehen, was ich aber heute auf jeden Fall machen werde.

      Ich würde mich natürlich sehr freuen, wenn du dich mit meinem Problem beschäftigst und vielleicht eine Lösung findest.

      Ich selbst muss mich erst einmal in XNA einfinden, da ich XNA noch nicht lange benutzte und mich somit leider auf meine C#-Kenntnisse verlassen muss, welche die XNA-Framework-Komponenten natürlich nicht beinhalten und ich den Weg nur erahnen kann.

      Wegen des Zeichnens der Texture2D:
      Ich hatte es so verstanden, dass bei Angabe eines Vector2 statt einem Rectangle die Width und die Height von der Textur2D übernommen wird, da logischerweise nur bis zum Ende der Textur gezeichnen werden kann.


      Ich werde nun ins Bett gehen und mir das Ganze morgen nochmal angucken und vielleicht finde ich eine Lösung und kann euch an meiner Lösung teilhaben lassen.