Archivo de la etiqueta: Tutoriales

Cómo automatizar la colocación de items en mapas con Godot Engine

Si estas desarrollando un vídeojuego (en Godot Engine) y quieres añadir mejoras u otros elementos, es probable que termines preparando muchas escenas para los items, monedas y otros objetos particulares, que después tendrás que posicionar dentro de un nivel. Instanciar y posicionar una escena dentro de otra puede resultar engorroso, sobretodo si después cambias de opinión y quieres eliminar o cambiar la posición de un item… en este artículo aprenderán a usar el nodo TileMap con un script muy sencillo, que les facilitará la tarea de colocar items en sus niveles.

Preparar el TileMap

Después de añadir un nodo TileMap con el nombre del item o cosa que represente, añádanle un recurso tileset con la imagen del objeto. Para crear ese recurso sólo tienen que hacer clic derecho en algún lugar del Sistema de Archivos y después presionar sobre «Crear Recurso > TileSet».

Supongo que ya saben trabajar con ese tipo de recursos. Después de añadir una imagen, presionan el botón amarillo con la opción de «Tile único» y ajustan el tamaño con el rectángulo amarillo. Después de colocar el recurso Tileset dentro del nodo TileMap, hagan que las celdas tengan el tamaño de la imagen de su item. En mi caso el item tiene las dimensiones de 16×16 pixeles.

Script del TileMap

Ya con eso podemos dibujar en cualquier lugar del mapa una imagen estática de nuestro objeto, faltaría que esas imágenes se convirtieran en una nueva instancia de la escena correspondiente. Añadan un script normal al nodo TileMap y copien lo siguiente:

extends TileMap

var cherry = load("res://Items/Cherry/Cherry.tscn")

func _ready():
	for c in get_used_cells_by_id(0):
		var new_cherry = cherry.instance()
		add_child(new_cherry)
		new_cherry.global_position = map_to_world(c) + Vector2(0, 8)
		set_cellv(c, -1)
  • La variable cherry lleva el nombre de su item y guarda con load la dirección de la escena que tiene ese item en la carpeta de proyecto. Pueden obtener esa dirección si desde el Sistema de Archivos hacen clic derecho sobre una escena y buscan la opción «Copiar Dirección».
  • La variable c del bucle for tomará la posición de todas las celdas ocupadas en el TileMap. La función get_used_cells_by_id(0) devolverá una lista (array) y el bucle se ejecutará según el tamaño de esa lista. Con cada valor de la variable c, una nueva instancia se guardará como hija del nodo TileMap.
  • Cuando decimos map_to_world(c) estamos indicando que la nueva posición global de cada item pase de la posición local del mapa (que en ese momento se guarda en «c») a la posición global de nuestro juego. Fíjense en que durante todas las vueltas del bucle, la variable «c» siempre tendrá el valor de Vector2() con la ubicación de cada celda. Para que los items se alineen con el suelo, pueden sumar un Vector2(0, y aquí poner el resultado del tamaño vertical de su item dividido entre dos) por ejemplo: como mi item mide 16px de alto, sume un Vector2(0, 16/2) para que quede alineado. Ustedes pueden sumar o restar según los valores que necesiten.
  • Con la última línea de set_cellv(c, -1) estaremos eliminando la imagen estática que creamos al principio en la posición que tenía la variable c durante esa pasada del bucle.

Todo listo, deberían tener un resultado así:

Si tienen alguna duda, pueden dejarla en los comentarios :).

Botones virtuales para juegos en dispositivos móviles – Godot Engine

¡Hola! en este tutorial veremos una pieza fundamental para juegos de teléfonos. Incluir teclas virtuales en Godot es súper sencillo. Este artículo es una adaptación de otro tutorial, así que necesitarán que su personaje ya se pueda mover con un teclado desde la computadora.

Mi código de movimiento, sería algo como esto: (noten que en la dirección de izquierda o derecha, se define con la entrada de la acción «ui_right» y «ui_left»)

Muy bien: entren en la escena principal del juego y dentro de un nodo CanvasLayer, añadan los botones que necesiten para mover a su personaje, con el nodo de tipo TouchScreenButton. Un aproximado, serían tres de esos nodos, uno para la izquierda, otro para la derecha y un último para la flecha de saltar. A cada uno le colocan una imagen correspondiente a su acción: el primero se llama izquierda, tiene la flecha izquierda, el derecho es derecha, tiene su flecha, y el último se llama salto, con la flecha que apunta hacia arriba.

Para decirle a Godot que presionar esos botones desencadena una acción, la clase TouchScreenButton tiene una propiedad llamada «Action» que al ser presionada, producirá una entrada con el nombre que digamos. A cada dirección se le asignará una acción diferente: a izquierda y derecha, ui_left y ui_right respectivamente, ya que son las acciones que buscamos para mover horizontalmente a nuestro jugador. Y al salto, le corresponde ui_up.

Lo último que falta configurar para estos nodos, es que en su propiedad “Visibility Mode” indiquemos “Tuch screen only” para que sólo se muestre cuando el juego se ejecute sobre un entorno donde exista una pantalla táctil. Y si quieren emular un toque de la pantalla con el puntero del mouse, vayan a los Ajustes de Proyecto y, escribiendo «touch» en el buscador, activen la emulación de los toques.

De esta forma terminamos. Ahora, tocar esos botones produce el mismo efecto que presionar el teclado.