Siemkia! Chciałbym przedstawić mam moje ostatnie "dziecko" napisane w C#/XNA ułatwiające (przynajmniej początkującym) tworzenie i obsługę kamery 2D w grach XNA bez wykorzystywania macierzy. Biblioteka opiera się na kilku prostych klasach.
Spis klas: Spoiler
Camera(CreateObjectCenter cObj, Control controls) - Podstawowa klasa biblioteki inicjująca działanie kamery oraz klawiszy do operowania nią
Metody
Update(int step, Object2D[] objects) - Aktualizuje kamerę o daną wartość (step), przesuwając/oddalając obiekty (objects) w stronę centralnego obiektu
Zoom(Object2D[] objects, int action, int value) - Powiększa lub zmniejsza "pole widzenia" kamery o wartość parametru "value" w zależności od wartości parametru "action", jeśli parametr "action" ustawimy na 0 zmniejszamy punkt widzenia (przybliżamy kamerę do sceny), a jeśli na 1 zwiększamy punkt widzenia (oddalamy się od sceny)
MoveCamera(Object2D[] objects, int x, int y) - Zmienia położenie kamery o dane wartości, parametry x i y przemieszczają kamerę wzdłóż osi x i y.
Spoiler
CreateObjectCenter(int x, int y, int w, int h, Texture2D tex) - tworzy obiekt centralny o podanych danych, pozycji x, y, wielkości, wysokości obiektu oraz danej teksturze
Metody
DrawObject(SpriteBatch sprite) - rysuje obiekt centralny
Spoiler
Control(Keys key_up_camera, Keys key_down_camera, Keys key_left_camera, Keys key_right_camera) - definiuje klawisze do obsługi kamery, kolejno: klawisz zmieniający położenie kamery w górę, dół, lewo i prawo
Metody
BRAK
Spoiler
Object2D(Texture2D tex, Rectangle rec) - definuje obiekt w przestrzeni 2D o podanej teksturze i Rectangle
Metody
Draw(SpriteBatch sprite) -- rysuje obiekt
Spoiler
DrawAllObjects(Object2D[] objects, SpriteBatch sprite) - Rysuje wszystkie obiekty (prócz obiektu centralnego)
Metody
BRAK
Przykład użycia biblioteki w aplikacji:
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 Camera2DLib;
namespace TestCam
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D[] tex = new Texture2D[2];
CreateObjectCenter center;
Camera cam;
Control controlkey;
Object2D[] array_objects = new Object2D[3];
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
tex[0] = Content.Load<Texture2D>("IMG_0001O");
tex[1] = Content.Load<Texture2D>("IMG_0006");
center = new CreateObjectCenter(150, 150, 30, 30, tex[0]);
controlkey = new Control(Keys.Up, Keys.Down, Keys.Left, Keys.Right);
cam = new Camera(center, controlkey);
Object2D ob1 = new Object2D(tex[1], new Rectangle(2,5,30,30));
Object2D ob2 = new Object2D(tex[1], new Rectangle(160,0,30,30));
Object2D ob3 = new Object2D(tex[1], new Rectangle(500,0,30,30));
array_objects[0] = ob1;
array_objects[1] = ob2;
array_objects[2] = ob3;
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
cam.Update(20, array_objects);
if (Keyboard.GetState().IsKeyDown(Keys.F1))
{
cam.Zoom(array_objects, 0, 50);
}
if (Keyboard.GetState().IsKeyDown(Keys.F2))
{
cam.Zoom(array_objects, 1, 50);
}
cam.MoveCamera(array_objects,100,-100);
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
DrawAllObjects draw = new DrawAllObjects(array_objects, spriteBatch);
center.DrawObject(spriteBatch);
base.Draw(gameTime);
}
}
}
lub
PastebinSposób instalacji biblioteki w programie:Spoiler
1. Pobierz bibliotekę z linku poniżej
2. Stwórz projekt gry Windows
3. Kliknij PPM w References
4. Wybierz "Add Reference"
5. W oknie dialogowym zaznacz zakładkę "Browse"
6. Wskaż lokalizację biblioteki
7. Wciśnij "OK" by dodać bibliotekę do projektu
8. Zacznij pisać grę z użyciem mojej biblioteki
Download:Sendspace