WedX - журнал о программировании и компьютерных науках

Выполнение двух последовательностей действий Cocos2D одновременно не работает

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

[self runAction:
         [CCSequence actions:
          [CCDelayTime actionWithDuration:0.5],
          [CCMoveBy actionWithDuration: 1.0f
                              position:ccp(-lastXPositionForCamera, 0)],
          [CCCallFunc actionWithTarget:self
                              selector:@selector(startOver)],
          nil]];

// Run a second action at the same time.
// This second action will cause the camera to zoom out and then back in
[self runAction:
     [CCSequence actions:
      [CCDelayTime actionWithDuration:0.5],
      [CCScaleTo actionWithDuration: 0.5f scale:0.5f],
      [CCScaleTo actionWithDuration: 0.5f scale:1.0f], nil]];

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

Если я изменю начальное значение CCDelayTime на 0,4, поведение немного изменится. В этом случае камера начинает панорамирование справа налево после небольшой задержки. Затем он перестает панорамировать, пока камера отдаляется. Наконец, камера возобновит панорамирование справа налево, одновременно увеличивая масштаб.

Если в приведенном выше коде все в порядке, то есть ли лучший способ сделать плавный переход, состоящий как из действий масштабирования, так и действий панорамирования?


  • Проблема могла быть в разной продолжительности. Попробуйте разделить действие CCMoveBy на 2 действия продолжительностью 0,5f: первое перемещается на половину расстояния, второе - на другую половину. 09.07.2013
  • @Smugbit Studios - Это тоже не сработало. Однако странно то, что если я изменю position: ccp (-lastXPositionForCamera, 0)] на position: ccp (lastXPositionForCamera, 0)], я получу плавный переход с уменьшением масштаба во время движения камеры. К сожалению, камера движется не в том направлении, но показывает, что одновременные действия масштабирования и панорамирования возможны. Может быть, это ошибка box2D или это указывает на проблему с моим кодом? 09.07.2013

Ответы:


1

Это не решает проблему двух действий, но сработает в вашем случае ...

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

[self runAction:
     [CCSequence actions:
      [CCDelayTime actionWithDuration:0.5],
      [CCSpawn actions:
       [CCSequence actions:
        [CCMoveBy actionWithDuration: 1.0f
                          position:ccp(-lastXPositionForCamera, 0)],
        [CCCallFunc actionWithTarget:self
                          selector:@selector(startOver)],
        nil],
       [CCSequence actions:
        [CCScaleTo actionWithDuration: 0.5f scale:0.5f],
        [CCScaleTo actionWithDuration: 0.5f scale:1.0f], nil]
       ,nil] ,nil];
08.07.2013
  • К сожалению, это ведет себя точно так же. Сначала он уменьшает масштаб. Затем он одновременно увеличивает масштаб, а камера перемещается справа налево. 09.07.2013
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]