Я только что сделал простой проект Cocos2d-x. В нем несколько сцен, и у каждой есть свой JavaScript.
const MyClass = cc.Class.extend({
...
update: function() {
this.remainTimes --;
},
// Call the schedule method in your class constructor or init method
ctor: function() {
// Schedule the update function to be called every frame
this.schedule(this.update().bind(this), 1);
label.setFontFillColor(this.remainTimes);
cc.log('remainTimes : ', this.remainTimes);
};
});
вот логи консоли:
remainTimes : 10
remainTimes : 9
remainTimes : 8
remainTimes : 7
...
Но текст метки такой: 10 после 1 с 8 и через 1 с 6...
Я ищу, вызывается ли этот Dashboard.js дважды в Dashboard.scene, но ничего!
Иногда работает корректно, иногда неправильно.... Почему?
Я решил эту проблему и хочу показать правильное оставшееся время.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, что ошибка возникает из-за того, что этот скрипт вызывается несколько раз.
Вы упомянули, что связываете ссылки этого скрипта со сценой Dashboard.
Разве вы не вызываете эту функцию расписания несколько раз в сцене?
пожалуйста, используйте функцию unschedule() в своем коде.
Эта ошибка возникает из-за перегрузки скрипта.
Я имею в виду dashboard.js, связанный со сценой на приборной панели.
поэтому этот скрипт загружается один раз при загрузке сцены информационной панели, и сценарий не удаляется даже при выходе из сцены информационной панели, пока не обновится браузер.
Итак, функция schedule работает в оперативной памяти.
Чтобы устранить эту ошибку, я связываю весь сценарий с первой сценой, а не с собственной сценой.