PDA

Просмотр полной версии : Дождаться изменения объекта


FactoREAL2
15.09.2016, 18:10
Здравствуйте. подскажите пожалуйста, как можно дождаться "обновления" объекта и после этого выполнить код ? Суть в следующем: имеется некий объект _global.sub.sub2.my_object. имеется моя ф-ция myFunc(), которая использует этот объект и после выполнения моей ф-ции объект должен измениться. моя ф-ция выполняет действия, которые влекут изменение объекта. но проблема в том, что объект изменяется не мной, а каким-то способом, который мне не известен (черный ящик). я не знаю когда и как именно изменяется объект, но точно знаю что изменения происходят не мгновенно после выполнения моей ф-ции, а с какой-то задержкой. Подскажите как наиболее правильно выполнить в цикле мою ф-цию, что бы на каждой итерации цикла дожидаться изменения объекта. мне нужно примерно следующее:

while(условие) {
myFunc();
}

если я делаю именно так, то моя ф-ция зацикливается т.к. каждый раз она "работает" с одним и тем же объектом _global.sub.sub2.my_object потому что он не успевает измениться.

Bletraut
15.09.2016, 19:01
Что значит объект изменяется?

Tails
15.09.2016, 19:25
FactoREAL2,
На флеше нельзя использовать бесконечные циклы, из-за этого не произойдёт обновление экрана и всё зависнет.

Вам нужны Timer, setInterval или EnterFrame. Выбирайте что по душе. Но лучше всего, если есть такая возможность, наследовать "объект" от диспетчера и прикрутить ему распуливание событий при изменений свойств. Это самое трезвое решение.

А что за объект? Все нативные флешовые классы имеют события для уведомлений об изменениях.

FactoREAL2
15.09.2016, 21:36
Что значит объект изменяется?
ну к примеру он был

{
a:{x:1, y:2},
b:{x:2, y:2}
}
а стал:

{
с:{x:4, y:1}
}

Добавлено через 12 минут
FactoREAL2,
Вам нужны Timer, setInterval или EnterFrame. Выбирайте что по душе. Но лучше всего, если есть такая возможность, наследовать "объект" от диспетчера и прикрутить ему распуливание событий при изменений свойств. Это самое трезвое решение.

я подозреваю что нужно что-то типа setInterval но не знаю как именно воспользоваться им. все что вы пишете про диспатчеры и события наверное правильно, но опять же, я не знаю как устроен этот "объект" (у меня нет исходного кода его реализации). что б вы понимали, я встраиваю свой код в уже работающее приложение. я вижу что есть объект, вижу все его свойства, но не знаю как он реализован. какие он там события генерирует, от какого класса наследуется и т.п. я не знаю. если это все можно узнать (без исходного кода) - подскажите как.

Bletraut
15.09.2016, 23:02
Если можешь к объекту обратиться, то можешь на него и слушатель повесить. Я не уверен, но может есть Event.CHANGE?

FactoREAL2
16.09.2016, 09:30
нет. по Event.CHANGE ничего не происходит =(