Crea Juegos 2D con Tiniest2D
Exportando y Mejores Prácticas
Lesson 11 of 11 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
Exportando Tu Juego
- Haz clic en el ícono de Exportar en la barra superior
- Elige una ubicación y un nombre de archivo para tu juego
- El motor crea un archivo
.exeindependiente con tu proyecto incrustado - ¡Distribuye este único archivo - no se necesitan otros archivos!
El juego exportado:
- Se ejecuta sin la interfaz del editor
- Contiene todas las imágenes, escenas y código
- Está encriptado para proteger tus activos
Consejos y Mejores Prácticas
Rendimiento
- Mantén tamaños de imagen razonables (píxeles, no alta resolución)
- Elimina objetos que ya no necesitas con
removeObject() - Usa capas para organizar el orden de renderizado
Organización
- Asigna nombres significativos a objetos e imágenes
- Usa comentarios para documentar tu código
- Agrupa variables relacionadas
Depuración
- Usa
print()para mostrar valores de variables - Los mensajes de impresión aparecen en la ventana del juego
- Verifica los tipos de colisión si los objetos atraviesan paredes
Problemas Comunes
Objetos no colisionan:
- Verifica los tipos de colisión (ambos objetos necesitan tipos apropiados)
- Asegúrate de que los objetos estén añadidos a la escena
- Verifica que el sprite tenga un colisionador habilitado
Los objetos atraviesan paredes:
- Las paredes deben ser
COLLISION_STATIC() - Los objetos en movimiento deben ser
COLLISION_DYNAMIC() - Los objetos muy rápidos pueden atravesar - reduce la velocidad o aumenta los límites de colisión
La cámara no sigue al jugador:
- Actualiza la posición de la cámara en
onUpdate(), no solo enstart() - Recuerda que la posición de la cámara es el centro de la vista
Tarjeta de Referencia Rápida
// Crear activos
var img = Sprite(16, 16)
var scene = Scene()
var sfx = Audio()
var obj = Object("Nombre")
// Manipulación de objetos
setX(obj, 100)
setY(obj, 100)
setSprite(obj, img)
setCollisionType(obj, COLLISION_DYNAMIC())
addObject(scene, obj)
// Manipulación de sprites
fillSprite(img, 255, 0, 0, 255) // Rellenar con rojo
setPixel(img, 0, 5, 5, 0, 255, 0, 255) // Establecer píxel en (5,5) en el marco 0
var color = getPixel(img, 0, 5, 5) // Obtener [r,g,b,a] en (5,5)
setAnimationFPS(img, 24) // Establecer velocidad de animación
var fps = getAnimationFPS(img) // Obtener velocidad de animación
// Física (velocidad + gravedad)
setGravityY(scene, 300) // Establecer gravedad de la escena
setVelocityX(obj, 100) // Mover a la derecha
setVelocityY(obj, -200) // Saltar hacia arriba
// Control de animación
setFrame(obj, 0) // Establecer a un marco específico
var frame = getFrame(obj) // Obtener marco actual
var count = getFrameCount(obj) // Total de marcos
// Control de escena
setScene(scene)
resetScene(scene)
setBackgroundColor(scene, 135, 206, 235) // Azul del cielo
// Consultas de escena
var obj = getObjectAt(scene, mx, my) // Objeto en el punto
var hits = getObjectsInBox(scene, x, y, 32, 32) // Objetos en el área
var enemy = getObjectByName(scene, "enemigo") // Encontrar por nombre
var all = getAllObjects(scene) // Obtener todos los objetos
var count = getObjectCount(scene) // Contar objetos
var coins = getObjectsBySprite(scene, coinSprite) // Por sprite
var enemies = getObjectsByCollisionType(scene, COLLISION_DYNAMIC())
// Audio
var handle = playAudio(sfx)
if (isAudioPlaying(handle)) { }
stopAudio(handle)
// Cámara (posición = centro de la vista)
setCameraX(scene, x)
setCameraY(scene, y)
setCameraZoom(scene, 3.0) // Muestra 240 unidades del mundo verticalmente
// Conversión de pantalla y coordenadas
var w = getScreenWidth()
var h = getScreenHeight()
var worldPos = screenToWorld(mouseX, mouseY) // [worldX, worldY]
var screenPos = worldToScreen(objX, objY) // [screenX, screenY]
// Modo de ventana (solo afecta a juegos exportados)
setWindowMode(WINDOW_MAXIMIZED()) // Predeterminado
setWindowMode(WINDOW_FULLSCREEN()) // Pantalla completa sin bordes
setWindowMode(WINDOW_WINDOWED()) // Ventana regular
// Entrada del teclado
if (isKeyPressed(KEY_SPACE())) { }
if (isKeyHeld(KEY_LEFT())) { }
// Entrada del ratón
if (isMouseButtonPressed(MOUSE_LEFT())) { }
var mx = getMouseX()
var my = getMouseY()
// Números aleatorios y matemáticas
var r = random() // 0.0 a 1.0
var n = randomInt(1, 10) // 1 a 10
var x = clamp(14, 0, 10) // 10
var y = lerp(0, 100, 0.5) // 50
var snapped = round(15.7) // 16
var dir = sign(-8) // -1
var power = pow(2, 3) // 8
var angle = PI() / 2 // 1.5708... radianes
var bob = sin(angle) // El trigonometría usa radianes
var deg = rad2deg(angle) // 90 grados
// Pilas de estilo de UI
uiPushElementColor(28, 40, 70, 220)
uiPushFontColor(255, 220, 120)
uiLabel("LISTO", 4, 4)
uiPopFontColor()
uiPopElementColor()
// Almacenamiento (guardar/cargar datos del juego)
var data = [100, "Jugador", true]
save(getAppDataPath() + "/MiJuego/save.dat", data)
var loaded = load(getAppDataPath() + "/MiJuego/save.dat")
if (fileExists(getAppDataPath() + "/MiJuego/save.dat")) { }
deleteFile(getAppDataPath() + "/MiJuego/old.dat")
// Control del juego
quitGame() // Salir del juego
// Bucle del juego
func start() { }
func onUpdate(dt) { }
func onCollision(a, b) { }
func end() { }
Tiniest 2D Pixel Engine - Crea juegos, no motores.