Nesta nova aula vou ensinar as Colisions, muita gente tem dúvidas quanto a isso, mas servem para quê? Para fazer uma colisão entre 2 ou mais objectos, como por exemplo, num homebrew queres evitar que a tua personagem passe por cima de uma casa, fazes uma colision e ela não consegue passar mais por cima.
Esta primeira parte, apenas é para preencher de variaveis e a criação de personagens, neste caso não usamos imagens, mas sim o Image.createEmpty que cria uma forma à tua escolha. personagem1:clear(COR) aqui é onde a cor da forma é colocado, no exemplo é branco.
Personagem = { x = 30, y = 100 } as variáveis x e y são sempre muito importantes em cada homebrew, esta permite indicar um local onde que a Personagem deve iniciar.
personagemAltura e personagemLargura funciona para definir exactamente a altura e a largura para mais tarde as colisions sejam exactas.
Agora vem as colisões, neste exemplo dei o nome de Bloco, mas podia ser um nome qualquer. Nesta parte é para defenir os locais onde os blocos devem estar, e umas comparações de variáveis. Em seguida está o movimento da personagem, isto serve para poderes movimentar a ta personagem. ( Quanto mais x ou y tiver, mais rápido anda, valor negativo = esquerda, baixo; valor positivo= direita, cima)
A Conclusão da Colision, é feita através neste caso por uma function, o nome (object) é simplesmente uma variável para substituir a nossa colisão. Em seguida à as variáveis if (se), só para tentares perceber:
if (Personagem.x + personagemLargura > object.x)
Se Personagem.x com personagemLargura for maior que então (them) Personagem.x = oldx
Nesta parte final é só para confirmar functions, colocar as imagens no ecrã.
Em primeiro vem a conformação das variáveis reveladas na fimColision.
Em seguida coloca-se cada bloco criado em cada fimColision.
Depois o screen:blit par a Personagem e Bloco para aparecer no ecrã
- Código:
--Cores
verde=Color.new(0,255,0)
branco = Color.new(255,255,255)
--Personagem 1
personagem1 = Image.createEmpty(32,32)
personagem1:clear(branco)
--Bloco
bloco1 = Image.createEmpty(32,32)
bloco1:clear(verde)
--Local da Personagem 1 - Variaveis
Personagem = { x = 30, y = 100 }
--Variáveis
personagemAltura = 32 --y
personagemLargura = 32 --x
Esta primeira parte, apenas é para preencher de variaveis e a criação de personagens, neste caso não usamos imagens, mas sim o Image.createEmpty que cria uma forma à tua escolha. personagem1:clear(COR) aqui é onde a cor da forma é colocado, no exemplo é branco.
Personagem = { x = 30, y = 100 } as variáveis x e y são sempre muito importantes em cada homebrew, esta permite indicar um local onde que a Personagem deve iniciar.
personagemAltura e personagemLargura funciona para definir exactamente a altura e a largura para mais tarde as colisions sejam exactas.
- Código:
--Colisions
Bloco = {}
Bloco[1] = { x = 100, y = 80, Altura = bloco1:height(), Largura = bloco1:width() }
Bloco[2] = { x = 300, y = 30, Altura = bloco1:height(), Largura = bloco1:width() }
Bloco[3] = { x = 200, y = 58, Altura = bloco1:height(), Largura = bloco1:width() }
--Mover a Personagem (Simples)
function moverPersonagem()
pad = Controls.read()
if pad:left() then
Personagem.x = Personagem.x - 1
end
if pad:right() then
Personagem.x = Personagem.x + 1
end
if pad:up() then
Personagem.y = Personagem.y - 1
end
if pad:down() then
Personagem.y = Personagem.y + 1
end
end
--Conclusão da Colision
function fimColision(object)
if (Personagem.x + personagemLargura > object.x) and (Personagem.x < object.x + object.Largura) and (Personagem.y + personagemAltura > object.y) and (Personagem.y < object.y + object.Altura) then
Personagem.x = oldx
Personagem.y = oldy
end
end
Agora vem as colisões, neste exemplo dei o nome de Bloco, mas podia ser um nome qualquer. Nesta parte é para defenir os locais onde os blocos devem estar, e umas comparações de variáveis. Em seguida está o movimento da personagem, isto serve para poderes movimentar a ta personagem. ( Quanto mais x ou y tiver, mais rápido anda, valor negativo = esquerda, baixo; valor positivo= direita, cima)
A Conclusão da Colision, é feita através neste caso por uma function, o nome (object) é simplesmente uma variável para substituir a nossa colisão. Em seguida à as variáveis if (se), só para tentares perceber:
if (Personagem.x + personagemLargura > object.x)
Se Personagem.x com personagemLargura for maior que então (them) Personagem.x = oldx
- Código:
--Fim
while true do
--Variáveis Final
oldx = Personagem.x
oldy = Personagem.y
screen:clear()
--Function Movimento
moverPersonagem()
--Finalizar cada fimColison com os Blocos
fimColision(Bloco[1])
fimColision(Bloco[2])
fimColision(Bloco[3])
--Mostrar Personagem no ecrã
screen:blit(Personagem.x,Personagem.y,personagem1)
--Mostrar Blocos no ecrã
for a = 1,3 do
screen:blit(Bloco[a].x,Bloco[a].y,bloco1)
end
screen.waitVblankStart()
screen.flip()
end
Nesta parte final é só para confirmar functions, colocar as imagens no ecrã.
Em primeiro vem a conformação das variáveis reveladas na fimColision.
Em seguida coloca-se cada bloco criado em cada fimColision.
Depois o screen:blit par a Personagem e Bloco para aparecer no ecrã