Diskuze: xna - 2Dcamera

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

Avatar
Army
Neregistrovaný
Avatar
Army:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

něco jako pokemoni na gameboy?

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

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.