Nano Hash - криптовалюты, майнинг, программирование

Воспроизведение 3 спрайтов последовательно без задержек

У меня есть большой спрайт-лист, и он не помещается в один спрайт-лист 2048. Поэтому я разделил его на 3 листа спрайтов (3 PNG, 2048x2048).

Но в моей игре он все равно должен играть как один цельный спрайт. Вот как я это делаю:

var sprite1 = new createjs.Sprite(ssheet1);
var sprite2 = new createjs.Sprite(ssheet2);
var sprite3 = new createjs.Sprite(ssheet3);

sprite1.on("animationend", sprite1_played);
sprite2.on("animationend", sprite2_played);
sprite3.on("animationend", sprite3_played);

stage.addChild(sprite1, sprite2, sprite3);

... cut here ...

function playSprite()
{
   sprite1.visible = true;
   sprite2.visible = false;
   sprite3.visible = false;

   sprite1.gotoAndPlay("ssh");
}

function sprite1_played()
{
   sprite1.visible = false;
   sprite2.visible = true;
   sprite3.visible = false;

   sprite2.gotoAndPlay("ssh");
}
function sprite2_played()
{
   sprite1.visible = false;
   sprite2.visible = false;
   sprite3.visible = true;

   sprite3.gotoAndPlay("ssh");
}
function sprite3_played()
{
   sprite1.visible = true;
   sprite2.visible = false;
   sprite3.visible = false;

   sprite1.gotoAndPlay("ssh");
}

Проблема в том, что когда я вызываю playSprite(), он начинает воспроизводить спрайт, состоящий из 3 разных спрайтов, и между воспроизведением спрайтов 1, 2, 3 (на мобильных устройствах) возникает заметная ЗАДЕРЖКА. Задержки исчезают на 2-м и всех последующих циклах.

Но задержки на первом цикле недопустимы и очень раздражают.

Есть ли у вас какие-либо идеи о том, как сделать так, чтобы все работало гладко с самого начала? Спасибо!


Ответы:


1

Во-первых, стоит отметить, что EaselJS напрямую поддерживает листы спрайтов с несколькими изображениями. Ознакомьтесь с документацией SpriteSheet для получения дополнительной информации.

Задержка, которую вы видите, — это стоимость загрузки новой большой текстуры (изображения) в мобильный графический процессор из памяти. Вы можете попробовать принудительно перенести изображение в графическую память, имея три растровых изображения (или спрайта), по одному для каждого изображения, в списке отображения, но не для просмотра. Возможно, вам придется поиграть с лучшим способом сделать это. Например, установка visible=false или alpha=0 не сработает, потому что элементы просто будут пропущены. Перемещение их за пределы может сработать или масштабирование

19.08.2015
  • Спасибо за ценный ответ, gskinner! Я заметил одну интересную вещь. Даже если я использую для параметра visible значение true/false, чтобы скрыть/показать каждый лист спрайтов, он не задерживается во втором цикле. Но я устанавливаю свойство visible в false и вызываю метод stop(). Задержка только в первом цикле. Но если я снова вызову метод playSprite() (связанный с нажатием кнопки), и он снова задержится, хотя он уже проигрывался... Странно, и я еще не мог определить причину. 20.08.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..