![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Вот так работает как надо при каждом возникновении события.
private function place (e:MouseEvent):void { e.target.stopDrag(); if (e.target.hitTestObject (pack2)) { if (e.target.index == 1) { e.target.index = 2; itemsInPack1--; itemsInPack2++; numberOfItems1.text = itemsInPack1.toString(); numberOfItems1.setTextFormat (format) numberOfItems2.text = itemsInPack2.toString(); numberOfItems2.setTextFormat (format) }; }; }; private function place (e:MouseEvent):void { e.target.stopDrag(); if (e.target.hitTestObject (pack2)) { if (e.target.index == 1) { e.target.index = 2; updateNumberOfItems (itemsInPack1, itemsInPack2, numberOfItems1, numberOfItems2); }; }; }; private function updateNumberOfItems (toReduce:Number, toEnlarge:Number, textToUpd1:TextField, textToUpd2:TextField):void { toReduce--; toEnlarge++; textToUpd1.text = toReduce.toString(); textToUpd1.setTextFormat (format) textToUpd2.text = toEnlarge.toString(); textToUpd2.setTextFormat (format) }; Последний раз редактировалось Furinax; 27.10.2009 в 16:03. |
|
|||||
|
Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
|
Мистику какую-то вы нам рассказываете) Вы точно уверены, что больше ничего не меняли?
И за какое событие отвечает обработчик place? |
|
|||||
|
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Серьезно, код№1 работает. А код№2 србатывает один раз, а потом перестает работать.
Листенер отвечает за MouseEvent.MOUSE_UP. Как видно, код№2 ничего больше не меняет, чего бы не менял код№1. Самый прикол: что в коде№2 обобщенная функция вызывается, но во второй раз не срабатывают Последний раз редактировалось Furinax; 27.10.2009 в 16:02. |
|
|||||
|
itemsInPack1, itemsInPack2 передаются в функцию по значению и меняются там как локальные переменные, сами же не меяются
возможно из-за этого ломается что-то в общем алгоритме к слову, зачем ты их передаешь, если они члены класса? |
|
|||||
|
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
itemsInPack1, itemsInPack2, также как и numberOfItems1, numberOfItems2 - это переменные экземпляра. Чтобы каждый раз не писать:
Решил написать обобщенную функцию. Но она, к сожалению не работает больше 1 раза. А если в обобщенной функции все локальные переменные определить как переменные экземпляра - то это нормальное решение? |
|
|||||
|
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Передаю в аргументы потому, что у меня очень много операторов if в усорвия которых будут входить и itemsPack3, и numberOfItems3 и т.д. Если для каждого из них столько расписывать, сколько в коде 1, то потом чтоб разобраться - придется в коде очень долго копаться. А тут одна функция, по которой все должно быть видно.
Осталость только додуматься, как при её повторном вызове менять переменную экземпляра больше чем 1 раз. |
|
|||||
|
попробуйте сделать так
trace(itemsInPack1); updateNumberOfItems (itemsInPack1, itemsInPack2, numberOfItems1, numberOfItems2); trace(itemsInPack1); значение itemsInPack1 не изменится чтобы все работало, нужно, чтобы itemsInPack1 и itemsInPack2 изменялись не в функции, а перед вот пример: updateNumberOfItems (--itemsInPack1, ++itemsInPack2, numberOfItems1, numberOfItems2); /////////////// private function updateNumberOfItems (toReduce:Number, toEnlarge:Number, textToUpd1:TextField, textToUpd2:TextField):void { textToUpd1.text = toReduce.toString(); textToUpd1.setTextFormat (format) textToUpd2.text = toEnlarge.toString(); textToUpd2.setTextFormat (format) };
__________________
я могу стать всем, если только захочу |
|
|||||
|
Цитата:
просто имей ввиду, что простые типы, если ты передаешь их в функцию, передаются по значению, т.е. так ты сможешь только воспользоваться значением _num, но не изменить его: из-за этого, похоже, все и ломается в твоем примере |
|
|||||
|
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Спасибо огромное! Никогда бы не догадался, что можно увеличивать аргумент прямо передавая его в функцию. Теперь это будет новым приемом в моем арсенале
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|