Diskuze: xna - 2Dcamera

C# .NET .NET (C# a Visual Basic) xna - 2Dcamera American English version English version

Aktivity (1)
Avatar
Army
Neregistrovaný
Avatar
Army:28.12.2012 21:14

Ahoj, už delší čas hledám cameru do mojí hry mám pouze pohybující ho se hráče pomocí int Y a X. Chci cameru pohybující se za hráčem. Nevíte někdo jak na to nebo popřípadě odkaz. Díky

 
Odpovědět 28.12.2012 21:14
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Army
Petr Nymsa:28.12.2012 21:20

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

Nahoru Odpovědět 28.12.2012 21:20
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Army
Neregistrovaný
Avatar
Army:28.12.2012 21:25

Vyzkouším a nevíš náhodou jak jde více přiblížit obraz na hráče(zoom).

 
Nahoru Odpovědět 28.12.2012 21:25
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Army
Petr Nymsa:28.12.2012 21:26

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

Nahoru Odpovědět 28.12.2012 21:26
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David
Redaktor
Avatar
Odpovídá na Army
David:28.12.2012 22:16

http://www.itnetwork.cz/…trojuhelniku
zkus neco v tomto stilu ze si vytvoris cameru a u zumu pudes zvetsovat osu z

Nahoru Odpovědět  +1 28.12.2012 22:16
Nic néni nemožné!
Avatar
Army
Neregistrovaný
Avatar
Odpovídá na David
Army:29.12.2012 10:21

Myslím že vykreslení 3d trojúhelníku mi moc nepomůže s 2d kamerou.

 
Nahoru Odpovědět 29.12.2012 10:21
Avatar
matesax
Redaktor
Avatar
Odpovídá na Army
matesax:29.12.2012 10:32

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));
    }
}
Editováno 29.12.2012 10:34
 
Nahoru Odpovědět 29.12.2012 10:32
Avatar
vodacek
Redaktor
Avatar
Odpovídá na Army
vodacek:29.12.2012 11:17

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

 
Nahoru Odpovědět 29.12.2012 11:17
Avatar
Army
Neregistrovaný
Avatar
Odpovídá na vodacek
Army:29.12.2012 11:58

Ano na vykreslování používám spriteBatch.
Tady je zdroják ale je to hodně amatérské... :D 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);
        }
    }
}
 
Nahoru Odpovědět 29.12.2012 11:58
Avatar
vodacek
Redaktor
Avatar
Odpovídá na Army
vodacek:29.12.2012 12:12

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

 
Nahoru Odpovědět 29.12.2012 12:12
Avatar
Army
Neregistrovaný
Avatar
Army:29.12.2012 12:25

A není to trochu jiná kamera? Díval jsem se na to video a zdá se že je to pro hru z boku kamera se posouvá jenom po X. Ale moje hra je shora. Půjde to nějak lehce předělat?

 
Nahoru Odpovědět 29.12.2012 12:25
Avatar
vodacek
Redaktor
Avatar
Odpovídá na Army
vodacek:29.12.2012 12:53

něco jako pokemoni na gameboy?

 
Nahoru Odpovědět 29.12.2012 12:53
Avatar
Army
Neregistrovaný
Avatar
Army :29.12.2012 12:56

Ano

 
Nahoru Odpovědět 29.12.2012 12:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.