Back

Movendo objetos com Love2D

Nesse post vou mostrar como podemos movimentar objetos com a game engine Love2D.

Os conceitos desse post são de nivel iniciante e representam algumas das dificuldades que passei enquanto estava estudando.

Utilizando o Mouse

Caso quisermos ter um objeto seguindo o ponteiro do mouse, como é o caso do jogo agar.io, por exemplo.

Encontrando coordenadas do mouse

Primeiro, precisamos ter controle sobre as coordenadas do mouse (x,y):

```lua

function love.update(dt)

local x,y = love.mouse.getPosition()

end

```

Pronto, com essa linha, já temos controle sobre onde o nosso mouse está.

Desenhando o objeto

Agora vamos desenhar o círculo que irá seguir o mouse:

```lua

function love.draw()

-- argumentos da funcao modo (que será desenhado), x, y, width, height

love.graphics.ellipse("fill", 50, 50, 50, 50)

end

```

Com isso já temos o nosso objeto em tela, por enquanto estático.

Dando vida ao objeto

Para fazer com que o objeto se movimente, vamos passar as coordenadas que obtemos do mouse e passar para a função draw() que é responsável por desenhar o nosso objeto na tela.

```lua

function love.update(dt)

local x,y = love.mouse.getPosition()

-- variavel global para poder passar as coords. entre funções

PLAYER = {

x = 0,

y = 0

}

end

function love.draw()

-- argumentos da funcao modo, x, y, width, height

love.graphics.ellipse("fill", PLAYER.x, PLAYER.y, 50, 50)

end

```

Agora nosso objeto está se movimentando, porém ele esta junto ao mouse e esse não é exatamente o comportamento que queremos, por isso vamos adicionar alguns elementos a nossa função.

Adicionando propriedades de velocidade e distância

Para que exista uma diferença entre a posição do objeto e do mouse, para causar a impressão de que o objeto está "seguindo o mouse", precisamos realizar um pequeno calculo:

```lua

-- variavel global para poder passar as coords. entre funcoes

-- agora movida para fora da funcao para que seja carregada somente uma vez

PLAYER = {

x = 0,

y = 0

}

function love.update()

local x, y = love.mouse.getPosition()

-- primeiro calculamos a diferença entre a posição

-- do nosso objeto e do mouse em x,y

local x_distance = mousex - PLAYER.x

local y_distance = mousey - PLAYER.y

-- definimos uma velocidade padrao

local speed = 0.05

-- atribuímos ao jogador a sua própria posição

-- somando o produto da sua distância com o mouse

-- com a velocidade padrão

PLAYER.x = PLAYER.x + (x_distance * speed)

PLAYER.y = PLAYER.y + (y_distance * speed)

end

```

> Note que nao alteramos a função love.draw()

Resultado

!