This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Несмотря на то, что отдельные изображения часто используются в качестве источника спрайтов, по соображениям производительности изображения необходимо объединять в большие массивы, называемые атласами. Объединение множества небольших изображений в атласы особенно важно для мобильных устройств, где память и вычислительная мощность более ограничены, чем в настольных компьютерах или специализированных игровых консолях.
В Defold ресурс Atlas — это список отдельных файлов изображений, которые автоматически объединяются в более крупное изображение.
Выберите New... ▸ Atlas из контекстного меню браузера Assets. Присвойте имя новому файлу, после чего он откроется в соответствующем редакторе. Свойства атласа отображаются в панели Properties, где их можно редактировать (см. ниже).
Атлас необходимо заполнить изображениями или анимацией, прежде чем использовать его в качестве источника графики для таких компонентов объекта, как Sprite и Particle FX.
Необходимо убедиться, что изображения добавлены в проект (перетаскиванием файлов изображений в нужное расположение в браузер Assets).
Перетащите изображения из панели Assets в окно редактора.
Либо клик ПКМ по корневому элементу атласа в панели Outline.
Выберите Add Images из контекстного меню, чтобы добавить одиночные изображения.
Откроется диалоговое окно, в котором можно найти и выбрать изображения для добавления в атлас. Обратите внимание, что можно использовать фильтр и выбирать несколько файлов одновременно.
Добавленные изображения отображаются в Outline в виде списка, при этом атлас в сборе можно увидеть в центральном окне редактора. Возможно, потребуется нажать F (View ▸ Frame Selection из меню) чтобы изменить масштаб отображения выделенного.
Выберите Add Animation Group из контекстного меню.
Новая, пустая группа анимации с именем по умолчанию (“New Animation”) будет добавлена в атлас.
Перетащите изображения из панели Assets в окно редактора, чтобы добавить их в текущую выделенную группу.
Выполните клик ПКМ по новой группе и выберите Add Images из контекстного меню.
Откроется диалоговое окно, в котором можно найти и выбрать изображения для включения их в группу анимации.
Нажмите Space при выделенной группе анимации для ее предварительного просмотра. Нажмите Ctrl/Cmd+T, чтобы закрыть предпросмотр. При необходимости настройте Свойства анимации (см. ниже).
Порядок изображений в Outline можно изменить, выделив их и нажав Alt + Up/down. Кроме того, можно легко создавать дубликаты, копируя и вставляя изображения в Outline (из меню Edit, контекстного меню по клику ПКМ или сочетаниями клавиш).
Каждый ресурс типа Atlas имеет набор свойств. Они отображаются в панели Properties при выделении корневого элемента в представлении Outline.
/builtins/materials/*_paged_atlas.material
.поиск=замена
.
Исходное имя каждого изображения (имя файла без расширения) будет преобразовано согласно этим шаблонам. (Например, шаблон hat=cat,_normal=
переименует изображение с именем hat_normal
в cat
). Это полезно при сопоставлении анимаций между разными атласами.Ниже приведены примеры различных настроек свойств с четырьмя квадратными изображениями размером 64×64, добавленными в атлас. Обратите внимание, что атлас увеличивается до 256×256, как только изображения перестают помещаться в 128×128, что приводит к значительным потерям текстурного пространства.
Каждое изображение в атласе обладает набором свойств:
Кроме списка изображений, входящих в группу анимации, доступен набор свойств:
None
— анимация вообще не воспроизводится, отображается первое изображение.Once Forward
— воспроизводится один раз, начиная с первого и заканчивая последним изображением.Once Backward
— воспроизводится один раз, начиная с последнего и заканчивая первым изображением.Once Ping Pong
— воспроизводится один раз, начиная с первого и заканчивая последним изображением, затем возврат к первому.Loop Forward
— воспроизводится циклически, начиная с первого и заканчивая последним изображением.Loop Backward
— воспроизводится циклически, начиная с последнего и заканчивая первым изображением.Loop Ping Pong
— воспроизводится циклически, начиная с первого и заканчивая последним изображением, затем возврат к первому.Начиная с версии Defold 1.4.2 стало возможно создавать текстуры и атласы во время выполнения.
Используйте resource.create_texture(path, params)
, чтобы создать новый ресурс текстуры:
local params = {
width = 128,
height = 128,
type = resource.TEXTURE_TYPE_2D,
format = resource.TEXTURE_FORMAT_RGBA,
}
local my_texture_id = resource.create_texture("/my_custom_texture.texturec", params)
После создания текстуры можно использовать resource.set_texture(path, params, buffer)
, чтобы установить пиксели текстуры:
local width = 128
local height = 128
local buf = buffer.create(width * height, { { name=hash("rgba"), type=buffer.VALUE_TYPE_UINT8, count=4 } } )
local stream = buffer.get_stream(buf, hash("rgba"))
for y=1, height do
for x=1, width do
local index = (y-1) * width * 4 + (x-1) * 4 + 1
stream[index + 0] = 0xff
stream[index + 1] = 0x80
stream[index + 2] = 0x10
stream[index + 3] = 0xFF
end
end
local params = { width=width, height=height, x=0, y=0, type=resource.TEXTURE_TYPE_2D, format=resource.TEXTURE_FORMAT_RGBA, num_mip_maps=1 }
resource.set_texture(my_texture_id, params, buf)
Можно использовать resource.set_texture()
для обновления подрегиона текстуры, указав ширину и высоту буфера меньше полного размера текстуры и изменив параметры x
и y
в вызове resource.set_texture()
.
Полученную текстуру можно напрямую использовать в компоненте модели через go.set()
:
go.set("#model", "texture0", my_texture_id)
Если текстура должна использоваться в компоненте спрайта, её необходимо подключить к атласу. Используйте resource.create_atlas(path, params)
, чтобы создать атлас:
local params = {
texture = texture_id,
animations = {
{
id = "my_animation",
width = width,
height = height,
frame_start = 1,
frame_end = 2,
}
},
geometries = {
{
vertices = {
0, 0,
0, height,
width, height,
width, 0
},
uvs = {
0, 0,
0, height,
width, height,
width, 0
},
indices = {0,1,2,0,2,3}
}
}
}
local my_atlas_id = resource.create_atlas("/my_atlas.texturesetc", params)
-- назначаем атлас компоненту 'sprite' на том же игровом объекте
go.set("#sprite", "image", my_atlas_id)
-- запускаем "анимацию"
sprite.play_flipbook("#sprite", "my_animation")
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB