В документации на Tween.addOnce в Phaser CE 2.9.1 сказано, что в конце можно добавлять свои произвольные аргументы для listener
1 |
addOnce(listener [, listenerContext] [, priority] [, args]) |
Это не работает — листенеру в списке аргументов идет первым сначала цель твина, затем ссылка на сам твин. Может, где-то в конце они и мои аргументы цепляют, но увидев такое расхождение, я решил вовсе не полагаться на передачу аргументов таким образом — и положил их в отдельный объект.
Баги в больших фреймворках расстраивают — и особенно расстраивают расхождения с документацией. В родных библиотеках Google для разработки под Android тоже полно такого.
PS: я в конечном итоге в одном проекте сделал так, что просто вычислял время анимации и заказывал продолжение работы логики не через коллбэки анимации, а через таймер.
1 2 3 4 |
// запускаем анимацию обмена 2 камней местами в игре match-3 this.view.swap(jewel1, jewel2); // заказываем через таймер с задержкой проверить своп на взрывы this.callWithDelay(this.blastCombos, this, this.view.SWAP_ANIMATION_DURATION); |
А они не говорят в доке, где твои аргументы будут. Я всегда вручную перепроверяю через переменную arguments. А тебе зачем понадобился этот метод? Я про него не читал, интерестно где ты ему нашел применение? =)
у меня есть цепочка двигающихся предметов
на последний предмет в цепочке я подвешиваю коллбэк на завершение — «Все передвижения сделаны»
Все верно, у меня тоже была такая необходимость. А какие данные ты планировал передавать в onComplete событие последнего анимированного элемента? Или ты хотел повесить callback, который должен был вызваться, когда вся анимация завершена?
да, как знак для наступления следующего действия
Так цепочку я вроде делал через tween = game.add.tween().to().to(), но всем отменял автостарт. После ставил задание tween.onComplete.add(callback, callback_context) и запускал твин twee.start(). Переменные callback, callback_context я передавал функцие конструктору анимации. Когда я еще работал командой Mozilla, они приучили меня к такой логике do_something(callback, callback_context) и все… так можно писат асинхронный код, ведь callback выполниться только тогда, когда функция завершит нужную работу. А если функция делает что-то паралельно, то это единственнй способ привести асинхронный код в синхронную логику.
п.с. самое главное — где обновленная игра?
я внезапно отвлекся на прохождение туториала по match3 — думал, справлюсь за 3 дня
оказалось, намного больше
дело в том, что там на JQuery
плюс комбинации только линейные, а я хотел сделать групповые, т.е. нормальные
исходник туториала тут — http://www.emanueleferonato.com/2017/10/24/complete-bejeweled-prototype-made-with-jquery-updated-to-jquery-3-2-1-improving-swipe-controls-and-working-with-any-board-size/
Спасибо за ссылочку, посмотрю… Как я понимаю ты хотел сделать игру на Phaser-е по их алгоритму на jQuery, но дополнить алгоритмом групового удаления?
p.s. Уточни Zaxx, что ты имел в виду под «сделать груповые»? Я поклонник Montezuma 2/3, идеальная время убивалка, если где-то надо подождать =)
сейчас короткий отчет напишу в блоге