2017-10-03 5 views
1

Ich habe ein Spritesheet mit 2 Sprites. Jedes Sprite ist 40x60. Die Gesamtgröße des Bildes beträgt 40x120. Es sieht so aus (die rote Linie ist Teil des 1. Sprites). Ich werde dir in einer Sekunde sagen, warum ich das hinzugefügt habe.Zeichnen eines Sprites aus einem Spritesheet mit XNA/Monogame

enter image description here

Es scheint, dass aus irgendeinem Grund, wenn sie versuchen, die zweite Sprite zu zeichnen, es wird immer die letzte Zeile des vorhergehenden Sprite zu nehmen. Ich habe diese rote Linie gezeichnet, um das zu veranschaulichen.

Dies ist mein Code, der den zweiten Sprit zieht:

Rectangle rect = new Rectangle(0, 60, 40, 60); // Choose 2nd sprite 
Vector2 pos = new Vector2(100, 100); 
Vector2 origin = new Vector2(0, 0); 

spriteBatch.Begin(); 
spriteBatch.Draw(mSpriteTexture, pos , rect, Color.White, 0.0f, origin, 6, SpriteEffects.None, 0.0f); 
spriteBatch.End(); 

Und das ist, wie es aussieht, wenn ich das Programm ausführen:

enter image description here

Irgendwelche Ideen, was ich falsch mache ?

Hinweis: In diesem Beispiel verwende ich scale = 6. Ich tat dies, weil es scheint, dass bei skala> 1 dieses Problem immer passieren wird. Wenn Skala = 1, scheint es nicht die ganze Zeit zu passieren.

+1

Haben Sie versucht, 61 an der Rechteck Y-Position zu verwenden, wenn das zweite Sprite wählen? – Steven

+0

Das funktioniert nicht. Sprites überschneiden sich noch mehr. – LEM

+1

Dieses Problem wird hier mit einigen möglichen Lösungen diskutiert: https://gamedev.stackexchange.com/questions/45764/xna-2d-spritesheet-drawing-rendering-problem – Monacraft

Antwort

1

Hatte das gleiche Problem. Gebrauchte SamplerState.PointClamp in meinem spriteBatch.Begin - nennen es zu beheben

Es sieht wie folgt aus: (monogame 3.6 tho)

SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null, null, viewMatrix); 
Verwandte Themen