Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

Экспорт вашей игры

  1. Нажмите на иконку Экспорт на верхней панели
  2. Выберите место и имя файла для вашей игры
  3. Движок создает автономный .exe с вашим проектом
  4. Распространяйте этот единственный файл - ничего другого не нужно!

Экспортированная игра:

  • Работает без интерфейса редактора
  • Содержит все изображения, сцены и код
  • Шифруется для защиты ваших активов

Советы и лучшие практики

Производительность

  • Держите размеры изображений разумными (пиксели, не высокое разрешение)
  • Удаляйте объекты, которые больше не нужны, с помощью removeObject()
  • Используйте слои для организации порядка рендеринга

Организация

  • Да распределяйте значимые имена для объектов и изображений
  • Используйте комментарии для документирования вашего кода
  • Группируйте связанные переменные вместе

Отладка

  • Используйте print() для вывода значений переменных
  • Сообщения печатаются в игровом окне
  • Проверьте типы коллизий, если объекты проходят сквозь стены

Общие проблемы

Объекты не сталкиваются:

  • Проверьте типы коллизий (оба объекта должны иметь соответствующие типы)
  • Убедитесь, что объекты добавлены в сцену
  • Убедитесь, что у спрайта включен коллайдер

Объекты проходят сквозь стены:

  • Стены должны быть COLLISION_STATIC()
  • Двигающиеся объекты должны быть COLLISION_DYNAMIC()
  • Очень быстрые объекты могут проходить сквозь стены - уменьшите скорость или увеличьте границы коллизии

Камера не следует за игроком:

  • Обновляйте позицию камеры в onUpdate(), а не только в start()
  • Помните, что позиция камеры - это центр вида

Быстрая справочная карточка

// Создание активов
var img = Sprite(16, 16)
var scene = Scene()
var sfx = Audio()
var obj = Object("Name")

// Манипуляции с объектами
setX(obj, 100)
setY(obj, 100)
setSprite(obj, img)
setCollisionType(obj, COLLISION_DYNAMIC())
addObject(scene, obj)

// Манипуляции со спрайтами
fillSprite(img, 255, 0, 0, 255)  // Заполнить красным
setPixel(img, 0, 5, 5, 0, 255, 0, 255)  // Установить пиксель по адресу (5,5) на кадре 0
var color = getPixel(img, 0, 5, 5)      // Получить [r,g,b,a] по адресу (5,5)
setAnimationFPS(img, 24)         // Установить скорость анимации
var fps = getAnimationFPS(img)   // Получить скорость анимации

// Физика (скорость + гравитация)
setGravityY(scene, 300)         // Установить гравитацию сцены
setVelocityX(obj, 100)          // Двигаться вправо
setVelocityY(obj, -200)         // Прыгать вверх

// Управление анимацией
setFrame(obj, 0)           // Установить конкретный кадр
var frame = getFrame(obj)  // Получить текущий кадр
var count = getFrameCount(obj)  // Общее количество кадров

// Управление сценой
setScene(scene)
resetScene(scene)
setBackgroundColor(scene, 135, 206, 235)  // Небесно-голубой

// Запросы сцены
var obj = getObjectAt(scene, mx, my)       // Объект в точке
var hits = getObjectsInBox(scene, x, y, 32, 32)  // Объекты в области
var enemy = getObjectByName(scene, "enemy")     // Найти по имени
var all = getAllObjects(scene)             // Получить все объекты
var count = getObjectCount(scene)          // Подсчитать объекты
var coins = getObjectsBySprite(scene, coinSprite)  // По спрайту
var enemies = getObjectsByCollisionType(scene, COLLISION_DYNAMIC())

// Аудио
var handle = playAudio(sfx)
if (isAudioPlaying(handle)) { }
stopAudio(handle)

// Камера (позиция = центр вида)
setCameraX(scene, x)
setCameraY(scene, y)
setCameraZoom(scene, 3.0)  // Показывает 240 мировых единиц вертикально

// Экран и преобразование координат
var w = getScreenWidth()
var h = getScreenHeight()
var worldPos = screenToWorld(mouseX, mouseY)  // [worldX, worldY]
var screenPos = worldToScreen(objX, objY)     // [screenX, screenY]

// Режим окна (влияет только на экспортированные игры)
setWindowMode(WINDOW_MAXIMIZED())  // По умолчанию
setWindowMode(WINDOW_FULLSCREEN()) // Полноэкранный без границ
setWindowMode(WINDOW_WINDOWED())   // Обычное окно

// Ввод с клавиатуры
if (isKeyPressed(KEY_SPACE())) { }
if (isKeyHeld(KEY_LEFT())) { }

// Ввод с мыши
if (isMouseButtonPressed(MOUSE_LEFT())) { }
var mx = getMouseX()
var my = getMouseY()

// Случайные числа и математика
var r = random()              // 0.0 до 1.0
var n = randomInt(1, 10)      // 1 до 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... радиан
var bob = sin(angle)          // Тригонометрия использует радианы
var deg = rad2deg(angle)      // 90 градусов

// Стили элементов UI
uiPushElementColor(28, 40, 70, 220)
uiPushFontColor(255, 220, 120)
uiLabel("READY", 4, 4)
uiPopFontColor()
uiPopElementColor()

// Хранение (сохранение/загрузка данных игры)
var data = [100, "Player", true]
save(getAppDataPath() + "/MyGame/save.dat", data)
var loaded = load(getAppDataPath() + "/MyGame/save.dat")
if (fileExists(getAppDataPath() + "/MyGame/save.dat")) { }
deleteFile(getAppDataPath() + "/MyGame/old.dat")

// Управление игрой
quitGame()  // Выход из игры

// Цикл игры
func start() { }
func onUpdate(dt) { }
func onCollision(a, b) { }
func end() { }

Tiniest 2D Pixel Engine - Создавайте игры, а не движки.