Nossa Câmera 2D vai conter as seguintes propriedades:
- Zoom
- Rotação
- Posição
Este seria o básico, que um controle de câmera deve possuir, entretanto o uso dessas condições é relativa ao seu aplicativo ou jogo.
Primeiramente, temos que criar um arquivo com formato de classe no Vb.Net:

Vamos ao código:
Com a classe criada, vamos chamar ela de Camera 2D
Agora temos que declarar as variáveis relativas à nossa nova classe, elas serão basicamente as nossas propriedades, e mais uma opção que vamos dar o nome de _transform, então ficará assim:
Agora temos que criar as propriedades para que na programação, possam ser usadas:
Este é o código para manipularmos as propriedades, agora precisamos criar um rotina "New()" para carregar elementos que são padrões para a classe, ficará assim:
Nossa câmera esta quase pronta, para finalizarmos agora iremos criar uma função que atualiza a posição da Matrix relacionada ao jogo:
Pronto, nossa câmera esta criada, o código inteiro fica assim:
Para usarmos a câmera no nosso jogo feito em XNA, teremos que colocar as informações da matrix da câmera no SpriteBatch, dessa forma:
Claro que deve-se levar em conta que ela antes disso deve ser declarada como uma variável no inicio do código do jogo, e também, para sofrer as alterações, seja sendo movida pelo mouse ou pelo teclado, vai da sua necessidade quanto ao aplicativo, exemplo:
Com a classe criada, vamos chamar ela de Camera 2D
Public Class Camera2D
Agora temos que declarar as variáveis relativas à nossa nova classe, elas serão basicamente as nossas propriedades, e mais uma opção que vamos dar o nome de _transform, então ficará assim:
Dim _zoom As Single Dim _rotation As Single Dim _pos As Vector2 Dim _transform As Matrix
Agora temos que criar as propriedades para que na programação, possam ser usadas:
Public Property Zoom As Single Get Return Zoom End Get Set(value As Single) _zoom = value End Set End Property Public Property Transform As Matrix Get Return _transform End Get Set(value As Matrix) _transform = value End Set End Property Public Property Rotação As Single Get Return _rotation End Get Set(value As Single) _rotation = value End Set End Property
Public Property Posição As Vector2 Get Return _pos End Get Set(value As Vector2) _pos = value End Set End Property
Este é o código para manipularmos as propriedades, agora precisamos criar um rotina "New()" para carregar elementos que são padrões para a classe, ficará assim:
Public Sub New() _zoom = 1.0F _rotation = 0.0F _pos = Vector2.Zero _transform = Matrix.CreateTranslation(New Vector3(0, 0, 0)) End Sub
Nossa câmera esta quase pronta, para finalizarmos agora iremos criar uma função que atualiza a posição da Matrix relacionada ao jogo:
Public Function Update() As Matrix _transform = Matrix.CreateRotationZ(_rotation) * Matrix.CreateScale(New Vector3(_zoom, _zoom, 1)) * Matrix.CreateTranslation(-_pos.X, -_pos.Y, 0) * MathHelper.Clamp(_zoom, 0.01F, 10.0F) Return _transform End Function End Class
Pronto, nossa câmera esta criada, o código inteiro fica assim:
Public Class Camera2D Dim _zoom As Single Dim _rotation As Single Dim _pos As Vector2 Dim _transform As Matrix Public Property Zoom As Single Get Return Zoom End Get Set(value As Single) _zoom = value End Set End Property Public Property Transform As Matrix Get Return _transform End Get Set(value As Matrix) _transform = value End Set End Property Public Property Rotação As Single Get Return _rotation End Get Set(value As Single) _rotation = value End Set End Property Public Property Posição As Vector2 Get Return _pos End Get Set(value As Vector2) _pos = value End Set End Property Public Sub New() _zoom = 1.0F _rotation = 0.0F _pos = Vector2.Zero _transform = Matrix.CreateTranslation(New Vector3(0, 0, 0)) End Sub Public Function Update() As Matrix MathHelper.Clamp(_zoom, 0.01F, 10.0F) _transform = Matrix.CreateRotationZ(_rotation) * Matrix.CreateScale(New Vector3(_zoom, _zoom, 1)) * Matrix.CreateTranslation(-_pos.X, -_pos.Y, 0) Return _transform End Function End Class
Para usarmos a câmera no nosso jogo feito em XNA, teremos que colocar as informações da matrix da câmera no SpriteBatch, dessa forma:
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, nothing, nothing, nothing, nothing, camera2D.Update())
Claro que deve-se levar em conta que ela antes disso deve ser declarada como uma variável no inicio do código do jogo, e também, para sofrer as alterações, seja sendo movida pelo mouse ou pelo teclado, vai da sua necessidade quanto ao aplicativo, exemplo:
Protected Overrides Sub Update(gameTime As GameTime) Dim deltaTime As Double = gameTime.ElapsedGameTime.TotalSeconds If Keyboard.GetState().IsKeyDown(Keys.Left) Then Camera2D.Position -= New Vector2(250, 0) * deltaTime End If MyBase.Update(gameTime) End Sub
Este é um exemplo de como mover a câmera para a esquerda, usando a seta para esquerda do seu teclado, com essa base, já é possível criar o seu próprio código para manipulação da câmera.
Nenhum comentário:
Postar um comentário