Godot - Parte 7

Limitando o movimento do carro à pista

Olá! Hoje iremos aprender a limitar o movimento do carro dentro da pista. No post anterior, aprendemos a criar um script vinculado a um Node e nele implementamos o código de movimento do carro, mas não ficou muito legal, pois o carro ficou com um movimento sem controle, pois o mesmo percorre todo o sentido horizontal e até some da nossa tela de jogo.

Então, vamos lá! Abra a sua Godot, abra o projeto e acesse o seu script. Para isso basta ir no arquivo que representa o script, do lado do seu Node.

Quando terminamos o post anterior, nosso carro já estava se movimentando, com o uso das setas no nosso teclado. Durante a execução em que estamos controlando o carro, existe uma maneira de sabermos o posicionamento do carro, a cada instante ou quadro quando estamos operando nele seu deslocamento.

Conheça a função print(), esta função recebe como parâmetro ou argumento, variáveis, funções,...etc. Sua funcionalidade está em imprimir valores na tela referenciados pelo que passamos como parâmetro. No nosso jogo agora, iremos usar essa função, para imprimirmos na tela as diversas posições que o carro assume ao deslocarmos durante o jogo. Mas como vamos pegar o valor da posição do carro, para jogarmos para o print retornar na tela esse valor? Simples, já temos um comando que faz isso, é o position, com ele capturamos a posição do node na nossa tela, como nosso node, Personagem, se move ao mexermos nas setas, a cada momento o position nos dará valores diferentes, e para sabermos esses valores, basta fazermos a função print(), imprimir na tela esse position.

Para isso veja o código abaixo:

extends Node2D

var esquerda
var direita
var desl_esquerda = Vector2(-1,0)
var desl_direita = Vector2(1,0)
var velocidade = 500


func _ready():

_process(true)


func _process(delta):

direita = Input.is_action_pressed("ui_direita")
esquerda = Input.is_action_pressed("ui_esquerda")

if direita:


translate(velocidade*desl_direita*delta)
if esquerda:

translate(velocidade*desl_esquerda*delta)

print(position) #nova linha de código



no código acima, temos na nova linha de código, a função print() e o que passamos como argumento, foi o position, que como já mencionamos, retorna o posicionamento do node, que no caso tem como node filho um sprite que carrega a imagem do carro. Então deixe como acima, e rode o jogo, você perceberá que na tela de saída, vários valores estarão sendo impressos, ao movimentarmos ou não. Como abaixo, no vídeo:



Perceba que ao movimentarmos o carro, os valores impressos vão mudando na coordenada x, já em y fica a constante 0, pois estamos movimentando o carro, apenas horizontalmente que é o eixo x.

Perceba também, que dou uma paradinha, quando chego com o carro nos extremos da pista, fizemos isso para que vejamos os valores que ficam sendo mostrados na tela, e assim, no nosso próximo passo será limitar a esses valores. Então como limite esquerdo vou colocar, x=-348 e como direito, x=69.

Para fazermos o carro ficar limitado a esses dois parâmetros em x, basta usarmos o poder dos ifs, isso mesmo, vamos colocar uma condicional, ficando nosso código como abaixo:

extends Node2D

var esquerda
var direita
var desl_esquerda = Vector2(-1,0)
var desl_direita = Vector2(1,0)
var velocidade = 500


func _ready():

_process(true)


func _process(delta):

direita = Input.is_action_pressed("ui_direita")
esquerda = Input.is_action_pressed("ui_esquerda")

if direita:


translate(velocidade*desl_direita*delta)
if esquerda:

translate(velocidade*desl_esquerda*delta)

print(position)

if position.x>=69: #nova linha de código
position.x=69 #nova linha de código
elif position.x<=-348: #nova linha de código
position.x=-348 #nova linha de código


A mágica está feita!! rsrs. Com a condicional criada, se você rodar o jogo, seu carro agora não sai da pista, você movimenta-o até chegar nas extremidades que foram definidas por você. Vamos explicar o código

no primeiro if, colocamos que se a posição do carro for maior ou igual a 69, (pois a medida que o carro vai para a direita em x, esse valor aumenta), então sua posição é igual a 69. Ou seja isso faz com o que o carro nunca passe de x=69, pois quando o valor passar disso, ele volta a receber como atribuição o mesmo valor.

Veja que anteriormente quando estávamos usando o print para imprimir os valores, ele estava sendo exibido na tela, por completo como coordenadas (x,y), mas quando colocamos position.x, estamos limitando a pegar apenas o valor da coordenada x, pois y não nos interessa, já que fica sempre em zero. Da mesma forma que pegamos o valor de x com position.x, nós também podemos atribuir um valor novo a sua posição, igualando position.x = algumvalor.

em elif, que significa se não se, ou seja caso o primeiro if não ocorra, ele parte para essa segunda condição onde se a posição do carro for menor ou igual a - 348(pois a medida que o carro vai para a esquerda em x, esse valor diminui), então sua posição é igual a -348. O que fizemos foi basicamente a mesma coisa do if anterior, apenas mudando um pouco a lógica em relação ao decréscimo.

Agora você pode apagar o print(), pois só usamos ele para nos situar das posições do carro e pegar os valores ideais de limites usados. Essa função é muito usada quando estamos programando, em qualquer tipo de linguagem de programação, imprimir na tela valores é poder acompanhar como estamos nos saindo e também verificar erros. Você usará muito os prints da vida, se resolver se tornar um programador.

Então era isso pessoal, até a próxima.


Se você perdeu o post anterior, clique abaixo:

Godot - Parte 6 (Criando um script para movimento do carro.)


Se você ainda não cadastrou seu email para receber atualizações de postagens, vá a nossa página inicial e cadastre, ou se preferir clique Aqui
Autor
Maclaine Sabino

Maclaine Sabino Graduado em Matemática, Administração, finalizando Análise e Desenvolvimento de Sistemas.
Ama aprender coisas novas, tecnologia e música.