Воспроизведение последовательности заданных кадров с использованием ActionScript3 Flash

Я новичок в Flash и ActionScript 3 У меня есть 8 кодов губ для персонажа, которого я создал в разных кадрах, поэтому я хочу воспроизвести свою анимацию кадр за кадром, но в другом порядке, чтобы сформировать фразу, которую будет говорить мой персонаж Я попробовал это самостоятельно, но не добился успеха:

    stop();

var tableau = new Array(); 
tableau[0]=2;
tableau[1]=4;
tableau[2]=1;
tableau[3]=7;
tableau[4]=8;
tableau[5]=1;
tableau[6]=7;

for(var i =0;i<tableau.length;i++){
    trace(tableau[i]==this.currentFrame);
    if (tableau[i]==this.currentFrame){
        gotoAndPlay(tableau[i]);
        trace(this.currentFrame);
    }
}

Если вы используете «for», вы получите последний кадр перед нарисованными кадрами, потому что весь блок for будет выполнен менее чем за 10 мс, подумайте, как долго должна длиться ваша анимация (я считаю, что это не 10 мс), используйте таймер или enter_frame для изменения кадров, это поможет вам увидеть всю последовательность в анимации

Ömer Erden 18.12.2018 14:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это довольно просто. Что вам нужно, так это подписаться на специальное событие, которое запускается один раз для каждого кадра, и перемещать точку воспроизведения один раз для каждого кадра в соответствии с планом.

stop();

var Frames:Array;

// This will prevent things from overlapping
// if one of the frames on the list is the
// current one and playhead will hit here
// once again (and try to execute code).
if (Frames == null)
{
    Frames = [2,4,1,7,8,1,7];
    addEventListener(Event.ENTER_FRAME, onFrame);
}

function onFrame(e:Event):void
{
    // Get the next frame index and remove it from the list.
    var aFrame:int = Frames.shift();

    // If there are no more frames to show,
    // unsubscribe from the event.
    if (Frames.length < 1)
    {
        removeEventListener(Event.ENTER_FRAME, onFrame);
    }

    gotoAndStop(aFrame);
}

Большое спасибо за вашу помощь. Вы знаете, как я могу синхронизировать его с аудиофайлом?

IT World 18.12.2018 14:58

@ITWorld Что вы имеете в виду под словом «синхронизировать»? Пожалуйста, объясните поподробнее.

Organis 18.12.2018 16:16

Я хочу, чтобы когда я запустил свой код, мой персонаж будет говорить, например, он скажет «Привет», так как я могу заставить моего персонажа говорить одновременно с воспроизведением моего аудиофайла, фонема за фонемой ??

IT World 18.12.2018 16:34

@ITWorld Я все еще не уверен, что понимаю, что вы хотите сделать, однако, возможно, это именно то, что вы ищете. Класс Звук отправляет событие SampleDataEvent.SAMPLE_DATA, которое содержит необработанные данные для звука, который должен быть воспроизведен. Вы можете извлечь эти данные (например, Google> as3 читать звуковые данные или официальная документация: help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/‌…) и научиться считывать их для пиков.

Organis 18.12.2018 17:19

Я хочу синхронизировать губы с воспроизводимым звуком.

IT World 19.12.2018 09:26

@ITWorld Тогда я был прав и для этого нужно обработать аудиоданные. Возможно, вам нужно следить за пиками громкости и определять произносимые гласные. Я не профессионал в области распознавания речи и на самом деле никогда не кодировал аудиоанализ, поэтому ничем не могу вам помочь.

Organis 19.12.2018 10:41

но я действительно благодарю вас за вашу помощь и ваше время желаю вам удачи и хорошего дня

IT World 19.12.2018 10:49

Другие вопросы по теме