Saudações a todos! Hoje eu gostaria de falar sobre como implementar o gerenciamento de furto em um projeto de jogo para Android no Godot Engine.Meu nome é Peter e sou um dos usuários ativos do mecanismo de jogo Godot Engine.No segmento de língua russa, há uma enorme escassez de materiais nessa ferramenta, o que me surpreende muito, pois é um dos mecanismos de jogo que mais cresce.Obviamente, é de muitas maneiras inferior a mecanismos como Unity, UE e similares, e você não fará um jogo de classe AAA nele.Contudo! É gratuito (completo), multiplataforma (completo) e seu peso é de cerca de 60 megabytes, em oposição à mesma unidade.O mecanismo funciona na maioria dos dispositivos, mesmo que este último seja de uma linha de orçamento bastante. Além disso, "pronto para uso", já está russo, possui todas as ferramentas necessárias a bordo, não requer software adicional e não consome toda a RAM na forma de execução.Eu já vi alguns artigos sobre Habré, e isso é muito pequeno, pois é tão amigável para o desenvolvedor que é uma grande omissão ir além e não tentar.O tópico desta postagem é a implementação do gerenciamento de furto (gestos) em um projeto Android.Em geral, a experiência do uso do mecanismo é bastante extensa e, se o tópico receber uma resposta, posso organizar um curso de treinamento inteiro. Neste post, quero chamar a atenção pelo menos para o mecanismo.Como linguagem de programação, você pode usar, novamente, fora da caixa, duas opções: GDScript e C #. Vou usar o primeiro.A interface do editor principal tem a seguinte aparência:
nele você pode trabalhar simultaneamente com scripts 3D, 2D e, em geral, tudo o que um desenvolvedor pode exigir.O mecanismo usa uma abordagem na qual seu jogo é um conjunto de cenas aninhadas uma na outra. E pode haver alguma confusão, porque eu uso o termo “cena” para nós que são apenas cenas de jogos (situações, janelas, estados de jogos (menus, jogos etc.)) e, para outros casos, eu uso o termo O "Prefab" foi emprestado da Unity.Como neste post vou considerar um caso especial, não vou expandir alguns tópicos. Se algo não estiver claro, há comentários.Então, a cena principal da demonstração, teremos um jogo.Sua estrutura fica assim:
O nó raiz do jogo armazena aninhado dentro de si:- mundo, - armazena dados de nível nele- - nível, - um conjunto de objetos do ambiente (blocos, anéis, obstáculos)- - jogador, - objeto de jogador- - InterpolatedCamera, - suave a câmera que monitora ainterface do player - GUI - não estará envolvida.Nomesde objetos e estrutura são arbitrários e esse é apenas um caso especial.Perto de alguns objetos, você pode ver ícones dizendo que esse objeto é uma pré-fabricada (cena aninhada) e um script também pode ser adicionado a ele.Então, clicando no ícone "script", entramos no editor de scripts; na verdade, o modo de operação do mecanismo simplesmente muda.
Nesse modo de operação, você pode editar o comportamento dos objetos. Na verdade, nesse caso, é um script do objeto mundial que, ao carregar um objeto no jogo, define o objeto da câmera (InterpolatedCamera) define o alvo para o rastreamento.extends Spatial
func _ready():
$InterpolatedCamera.target = '../player/camera'
Sintaticamente, o GDScript é semelhante ao Python. Você pode fazer um breve treinamento sobre o GDScript em russo aqui: Livro do GDScriptCom o objeto mundo, é claro, ele apenas define o alvo de rastreamento da câmera. O próximo objeto (já filho do mundo) é nivelado. Sua estrutura se parece com a seguinte:
De fato, esses são simplesmente objetos organizados com propriedades físicas que não possuem scripts ou comportamento. Além dos objetos "cell". Estes são anéis giratórios que desaparecem em contato com o objeto do jogador.O objeto player é o mais interessante no momento, que contém a lógica de controle de furto para telas sensíveis ao toque.Essa pré-fabricada é assim:
O objeto raiz possui um script, que veremos um pouco mais adiante.Primeiro, considere objetos aninhados.- camera, — , , . player.
- CollisionShape, — . «» . , , . .
- MeshInstance, — . , . Blender 3D , .
- Tween, . .
Bem, agora considere o próprio script no objeto raiz. Acontece ser o mais volumoso de todo o "jogo".
Bem, sua descrição e decodificação.
extends KinematicBody
const GRAV = 0.5
const SPEED = 2
const SWIPE_SPEED = 30
const JUMP_SPEED = 10
onready var ball = $MeshInstance
onready var tween = $Tween
var vel = Vector3()
var swipe = ''
func _ready():
pass
func _physics_process(delta):
vel.y -= GRAV
vel.z = -SPEED
ball.rotate_x(-delta * SPEED * 2)
if swipe && swipe != 'swiped':
if swipe == 'up' && is_on_floor():
vel.y = JUMP_SPEED
elif swipe == 'left' || swipe == 'right':
tween.interpolate_property(self, "translation",
translation, translation+Vector3(-2 if swipe == 'left' else 2,0,0), 0.2,
Tween.TRANS_CUBIC, Tween.EASE_IN_OUT)
tween.start()
swipe = 'swiped'
vel = move_and_slide(vel, Vector3.UP)
func _input(e):
if e is InputEventScreenDrag:
if !swipe:
if e.relative.y < -SWIPE_SPEED:
swipe = 'up'
elif e.relative.x < -SWIPE_SPEED:
swipe = 'left'
elif e.relative.x > SWIPE_SPEED:
swipe = 'right'
elif e is InputEventScreenTouch:
if !e.pressed:
swipe = ''
Descrevi cada linha, espero, com scripts, tudo mais ou menos é claro.Se estiver em russo, quando movermos o dedo pela tela, registramos a direção do movimento e da velocidade. Se o dedo se mover na velocidade desejada, contamos o furto. Com base em qual eixo e em qual direção o movimento estava indo, temos três opções: CIMA, ESQUERDA, DIREITA.Escrevemos o valor recebido em uma variável, que é imediatamente captada pelo evento de atualização do estado do objeto, e executamos as ações necessárias com ele, após o que ele marca o evento como cumprido e espera o próximo.Não tomei a maneira mais fácil de implementar um furto, mas é bastante confiável e funciona na maioria das situações. Claro, isso depende do gênero e do tipo de jogo.Como resultado do trabalho realizado, obtemos um exemplo de como é fácil implementar o gerenciamento de furto em literalmente dez minutos.No total, levei cerca de 30 minutos, levando em consideração a criação de modelos no Blender.Bem, de acordo com a tradição ...Vídeo de desenvolvimento