Ich möchte in meinem Sprite-basierten 2D-XNA-Spiel beliebige Linien zeichnen können. Wie kann ich in XNA eine einfache Linie auf dem Bildschirm zeichnen, ohne mich mit Vertex-Arrays oder Shadern zu befassen?
Ich möchte in meinem Sprite-basierten 2D-XNA-Spiel beliebige Linien zeichnen können. Wie kann ich in XNA eine einfache Linie auf dem Bildschirm zeichnen, ohne mich mit Vertex-Arrays oder Shadern zu befassen?
Antworten:
Sie können eine Linie mit Sprites zeichnen. Mit SpriteBatch.Draw (...) können wir ein Sprite (Textur) strecken und drehen.
In diesem Code nehmen wir eine 1x1-Pixel-Textur, strecken sie (indem wir ein Rechteck mit der richtigen Form definieren und es so drehen, dass es wie eine Linie aussieht.
Texture2D t; //base for the line texture
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
// create 1x1 texture for line drawing
t = new Texture2D(GraphicsDevice, 1, 1);
t.SetData<Color>(
new Color[] { Color.White });// fill the texture with white
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
DrawLine(spriteBatch, //draw line
new Vector2(200, 200), //start of line
new Vector2(100, 50) //end of line
);
spriteBatch.End();
base.Draw(gameTime);
}
void DrawLine(SpriteBatch sb, Vector2 start, Vector2 end)
{
Vector2 edge = end - start;
// calculate angle to rotate line
float angle =
(float)Math.Atan2(edge.Y , edge.X);
sb.Draw(t,
new Rectangle(// rectangle defines shape of line and position of start of line
(int)start.X,
(int)start.Y,
(int)edge.Length(), //sb will strech the texture to fill this rectangle
1), //width of line, change this to make thicker line
null,
Color.Red, //colour of line
angle, //angle of line (calulated above)
new Vector2(0, 0), // point in line about which to rotate
SpriteEffects.None,
0);
}