Diskuze: xna - 2Dcamera
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nejlepší je vlastně pohybovat s okolním světem. Tedy přičtené pozice hráče převedeš na posunutí světa. Výsledek se bude jevit tak, že hráč se hýbe
Prosím využívej tlačítko odpovědet.
To jsem ještě nezkoušel, ale zřejmě budeš muset přepočítat vykreslení.
Tedy zvětšit textury
http://www.itnetwork.cz/…trojuhelniku
zkus neco v tomto stilu ze si vytvoris cameru a u zumu pudes zvetsovat osu z
Myslím že vykreslení 3d trojúhelníku mi moc nepomůže s 2d kamerou.
V DirectX se používá Matrix:
Matrix.CreateTranslation(Matrix.World * Matrix.CreateRotationZ * Matrix.CreateScale * Matrix.CreateTranslation
To je matice - Z je vzdálenost mezi hráčem a odrazovým oknem...
Je to trochu kostrbaté - psal jsem to jako začátečník:
using System;
using Microsoft.Xna.Framework;
public class Camera2D
{
public float Zoom { get; set; }
public float Rotation { get; set; }
public Vector2 Position { get; set; }
public Camera2D()
{
Zoom = 1;
Rotation = 0;
Position = new Vector2(-400, 240);
}
public void Move(Vector2 amount)
{
Position += amount;
}
public Matrix GetTransformation(Microsoft.Xna.Framework.Graphics.GraphicsDevice graphicsDevice)
{
return Matrix.CreateTranslation(
new Vector3(Position.X, -Position.Y, 0))
*
Matrix.CreateRotationZ(Rotation)
*
Matrix.CreateScale(new Vector3(Zoom, Zoom, 1))
*
Matrix.CreateTranslation(new Vector3(graphicsDevice.Viewport.Width * 0.5f, graphicsDevice.Viewport.Height * 0.5f, 0));
}
}
to není zas tak úplně pravda, idkyž děláš jen ve dvou rozměrech grafická karta pracuje stále se třemi, jen jeden nepoužíváš, pro vykreslování používáš co? SpriteBatch? Od toho co používáš se dost odvíjí to jak ti pomoci, každopádně je asi nejlehčí hýbat jen kamerou a hráčem, ne vše přepočítávat o to ať se stará grafika, zkus také doplnit co vše jsi zkusil, tak se bude radit všem lépěji
Ano na vykreslování používám spriteBatch.
Tady je zdroják ale je to hodně amatérské... Není tam ani třída pro
hráče.
namespace GameTest
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D hrac, background;
SpriteFont font;
int posY = 0;
int posX = 0;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
graphics.PreferredBackBufferWidth = 1200;
graphics.PreferredBackBufferHeight = 650;
}
protected override void Initialize()
{
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
hrac = Content.Load<Texture2D>("hrac");
font = Content.Load<SpriteFont>("Arial");
background = Content.Load<Texture2D>("back");
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
KeyboardState keyState = Keyboard.GetState();
if (keyState.IsKeyDown(Keys.Up))
{
posY = posY - 3;
}
if (keyState.IsKeyDown(Keys.Down))
{
posY = posY + 3;
}
if (keyState.IsKeyDown(Keys.Left))
{
posX = posX - 3;
}
if (keyState.IsKeyDown(Keys.Right))
{
posX = posX + 3;
}
if (keyState.IsKeyDown(Keys.Escape))
Exit();
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(background, new Vector2(0, 0), Color.White);
spriteBatch.Draw(hrac, new Vector2(posX, posY), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
}
}
fájn, takže zkusíme použít googla a najdeme toto třeba http://www.david-gouveia.com/…ling-in-xna/ je tam i návod jak se na to přišlo a jak s tím pracovat, nicméně tento človíček mě štval svými názory, ale budeme mu věřit že to má dobře, pokud umíš i jen trochu englicky tak to určitě zvládneš, jinak sem piš ale zkus napsat konkrétní problém, nečekej že to za tebe celé uděláme, mimochodem tam je i paralax což je ten efekt jak se pozadí co je dál pohybuje pomalejc než to které je opticky blíže a to je dost cool efekt
Zobrazeno 13 zpráv z 13.