scrolltextu
Scroll textu z txt souboru
Vytvoříme soubor pravým na projekt Robotris v Solution Exploreru -> Add -> New Item -> Text File .
Souboru v okně Properties nastavit
Copy to Output Directory na
Copy always. Visual Studio bude tento soubor přidávat do složky s zkompilovanou hrou.
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.IO;
namespace UvodHry.komponenty
{
public class Autori : Microsoft.Xna.Framework.DrawableGameComponent
{
Game1 game1;
private string text;
private Vector2 startovniPozice;
public Vector2 pozice;
private float vyskaTextu;
private SpriteFont font;
public Autori(Game1 game1)
: base(game1)
{
this.game1 = game1;
}
public override void Initialize()
{
base.Initialize();
}
protected override void LoadContent()
{
NactiText();
startovniPozice = new Vector2(310, 550);
pozice = startovniPozice;
font = game1.Content.Load(@"menufont");
vyskaTextu = font.MeasureString(text).Y;
base.LoadContent();
}
public override void Update(GameTime gameTime)
{
double elapsed = gameTime.ElapsedGameTime.TotalMilliseconds;
if (game1.Input.PraveTlacitkoStisknuto() || game1.Input.StisknutaKlavesa(Keys.Escape))
{
this.Enabled = false;
this.Visible = false;
}
pozice.Y -= 0.08F * (float)elapsed;
if (pozice.Y < startovniPozice.Y - (vyskaTextu + 320))
pozice = startovniPozice;
base.Update(gameTime);
}
public override void Draw(GameTime gameTime)
{
// vyklreslení skrolujícího textu pomocí clippingu (nůžek):
// zapnutí clippingu
RasterizerState rs = new RasterizerState();
rs.ScissorTestEnable = true;
game1.spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, rs);
// uložení současných nůžek
Rectangle currentRect = game1.spriteBatch.GraphicsDevice.ScissorRectangle;
// nastavení nůžek
game1.spriteBatch.GraphicsDevice.ScissorRectangle = new Rectangle(310, 240, 700, 335);
// vykreslení textu
game1.spriteBatch.DrawString(font, text, pozice, Color.Red);
// reset původních nůžek
game1.spriteBatch.GraphicsDevice.ScissorRectangle = currentRect;
game1.spriteBatch.End();
base.Draw(gameTime);
}
public void NactiText()
{
text = "";
using (StreamReader sr = new StreamReader("autori.txt"))
{
text = sr.ReadToEnd();
}
}
}
}