🎯 Objetivo del tutorial
El objetivo de este tutorial es darte una introducción clara y práctica a la programación en Range, para que puedas comenzar a crear comportamientos interactivos dentro de tus proyectos.
A lo largo del contenido, aprenderás los conceptos básicos necesarios para trabajar con scripts, entender cómo se ejecuta la lógica en tiempo real y cómo controlar objetos dentro del motor. Esto te permitirá dar el salto de escenas estáticas a sistemas dinámicos y funcionales.
Al finalizar, contarás con las bases necesarias para seguir desarrollando tus propias mecánicas y profundizar en la programación dentro de Range.
Cuando comienzas en Range Engine, uno de los primeros pasos es aprender a mover objetos dentro de la escena. En este tutorial veremos cómo controlar un cubo usando W, A, S, D mediante Python.
🧱 Paso 1: Preparar la escena
- Abre Range
- Usa la escena por defecto
- Selecciona el cubo
⚙️ Paso 2: Crear el script en Python
Ve al Text Editor y crea un script llamado movimiento.py:
Y copia y pega el siguiente script:
import Range # Módulo principal del motor
def main():
# Obtenemos el controlador actual
cont = Range.logic.getCurrentController()
# Objeto dueño del script (el cubo)
own = cont.owner
# Acceso al teclado
keyboard = Range.logic.keyboard
# Velocidad de movimiento
speed = 0.1
# Estado de las teclas
keys = keyboard.events
# --------------------------------------------------
# Movimiento hacia adelante (W)
# --------------------------------------------------
if keys[Range.events.WKEY] == Range.logic.KX_INPUT_ACTIVE:
# Movimiento en eje local Y positivo
own.applyMovement((0, speed, 0), True)
# --------------------------------------------------
# Movimiento hacia atrás (S)
# --------------------------------------------------
if keys[Range.events.SKEY] == Range.logic.KX_INPUT_ACTIVE:
# Movimiento en eje local Y negativo
own.applyMovement((0, -speed, 0), True)
# --------------------------------------------------
# Movimiento hacia la izquierda (A)
# --------------------------------------------------
if keys[Range.events.AKEY] == Range.logic.KX_INPUT_ACTIVE:
# Movimiento en eje local X negativo
own.applyMovement((-speed, 0, 0), True)
# --------------------------------------------------
# Movimiento hacia la derecha (D)
# --------------------------------------------------
if keys[Range.events.DKEY] == Range.logic.KX_INPUT_ACTIVE:
# Movimiento en eje local X positivo
own.applyMovement((speed, 0, 0), True)
El procedimiento sería así:
🧩 Sobre el código
Si al ver este script sientes que hay partes que no entiendes del todo, no te preocupes — es completamente normal.
Cuando se empieza a programar en Range Engine, es muy común trabajar primero con código que uno no escribió. Esto no solo es válido, sino que forma parte natural del proceso de aprendizaje.
👉 Lo importante en esta etapa no es memorizar todo, sino familiarizarte poco a poco con los comandos, la estructura y la lógica del código.
Con el tiempo, empezarás a reconocer patrones:
-
cómo se accede a los objetos
-
cómo se leen inputs
-
cómo se aplican acciones
Y sin darte cuenta, muchos de estos elementos se irán quedando en tu memoria.
💡 Con práctica constante, experimentar y hacer pequeños cambios por tu cuenta, la programación comenzará a sentirse cada vez más natural y fluida.
🔗 Paso 3: Conectar el script
Con el cubo seleccionado:
- 🟣 Sensor: Always
- Activa True Level Triggering (Pulse)
- ⚙️ Controller: Python (Module)
- Escribe:
movimiento.main
- Escribe:
Conecta el sensor al controlador.

🧠 ¿Cómo funciona el sensor Always?
Esta combinación de bloques de lógica se puede interpretar de la siguiente manera:
El sensor Always es, literalmente, un sensor que se activa constantemente. Esto significa que ejecutará en cada frame todo lo que esté conectado a él, ya sea un script en un controlador o un actuador a través de un controlador.
🔁 True Level Triggering
Aquí es donde entra uno de los puntos más importantes:
- ✅ Activado (True Level Triggering)
El sensor se ejecuta continuamente en cada frame. - ❌ Desactivado
El sensor se ejecuta solo una vez.
👉 En otras palabras, este botón define si el comportamiento es continuo o puntual.
⏱️ Parámetro Skip
El parámetro Skip controla la frecuencia con la que se envía la señal de activación.
Skip = 0→ Se ejecuta en cada frame (máxima fluidez)Skip = 1→ Se salta un frame entre ejecucionesSkip = 60→ Aproximadamente una ejecución por segundo (dependiendo del framerate)
👉 Es una forma sencilla de “dosificar” la ejecución sin necesidad de código adicional.
⚙️ ¿Por qué usamos esta configuración?
En este tutorial buscamos un movimiento fluido y continuo, por lo tanto usamos:
- ✅ True Level Triggering activado
- ✅ Skip = 0
Esto asegura que el script se ejecute en cada frame, permitiendo una respuesta inmediata al input del jugador.
💡 Ejemplo práctico
Estos detalles son importantes para entender cuándo usar cada configuración.
Por ejemplo:
👉 Si conectas un sensor Always a un actuador de tipo Motion sin controlar la frecuencia, el objeto se moverá constantemente sin detenerse.
👉 Pero si desactivas True Level Triggering, el movimiento solo ocurrirá una vez.
Este tipo de configuraciones son fundamentales para comprender cómo fluye la lógica dentro de Range Engine y cómo se sincroniza con el game loop del motor.
▶️ Paso 4: Ejecutar
Presiona P para iniciar.
Ahora puedes mover el cubo:
- W → adelante
- S → atrás
- A → izquierda
- D → derecha

🧠 ¿Qué está pasando?
Cada frame:
- El sensor Always ejecuta el script
- Se detecta la entrada del teclado
- Se aplica movimiento al objeto
Esto ocurre dentro del famoso game loop del motor.
🌍 vs 🧭 Coordenadas globales y locales
Este punto es clave 👇
🌍 Coordenadas globales (world)
own.worldPosition.x += 0.1
- Basadas en los ejes del mundo
- No dependen de la rotación del objeto
- Útiles para lógica simple
👉 Problema: si el objeto gira, el movimiento puede sentirse incorrecto
🧭 Coordenadas locales (local)
own.applyMovement((0, 0.1, 0), True)
- Relativas al objeto
- Se adaptan a su rotación
- Son las más usadas en videojuegos
👉 Resultado:
W siempre mueve hacia “adelante” del objeto, sin importar su orientación
Para comprobarlo vamos a añadir un sensor Mouse y cambia el tipo de sensor a “Movement”, después conecta con un controlador And y un Actuador Mouse y veremos el resultado


Aqui tienes el archivo resultante del tutorial, en caso de que prefieras estudiarlo directamente y aprender de el.
💡 Conclusión
Este es un ejercicio básico, donde ya se te proporciona el script listo para usar. La intención no es que memorices el código, sino que comiences a entender cómo está estructurado y cómo se conecta dentro del flujo de trabajo en Range Engine.
A partir de aquí, es importante que poco a poco te adentres en la API del motor, ya que existen muchas otras formas de manipular objetos: desde físicas, rotaciones, inputs más avanzados, hasta sistemas completos de interacción.
👉 Este tipo de ejercicios son el primer paso para pasar de usar lógica visual a pensar en código, que es donde realmente tienes mayor control sobre el comportamiento de tu juego.
🧠 ¿Y ahora qué?
Bienvenido al desarrollo real con Range Game Engine 😄:
- 📖 Leer documentación
- 🐌 Optimizar código
- 🖨️ Usar
print()para depurar - 😵💫 Desesperarte un poco
Pero Range + Python te permite hacer MUCHÍSIMAS cosas 🎮🔥.
No es fácil ❌
Pero vale totalmente la pena ✅
La programación es un juego de paciencia y perseverancia 🧘♂️💻.
En el siguiente tutorial con python usaremos código para mandar llamar actuadores y sensores para activarlos o desactivarlos en tiempo real.
🍀 ¡Buena suerte y feliz scripting en Range!






Leave a Reply