Tutorial: Criando uma Camera2D no XNA da Microsoft em Vb.net

Este tutorial tem como objetivo, mostrar como criar uma classe para o controle de câmera em 2D para Vb.net em um aplicativo ou jogo feito em XNA.

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


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