![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 15
|
Игра "Дурак" .
Как присвоить слушателя событий для 6 кнопок в контейнере, которые имеют одинаковые имена? Cлушатель почему то присваивается только последней карте ! package com.Script { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.SimpleButton; import flash.display.Sprite; import flash.events.MouseEvent; public class Kart extends MovieClip { var shet:int = 0; var feuf:int; var movi:SimpleButton; var arr:Array = new Array(kresti6, kresti7, kresti8, kresti9, kresti10, kresti11, kresti12, kresti13, kresti14, love6, love7, love8, love9, love10, love11, love12, love13, love14, piki6, piki7, piki8, piki9, piki10, piki11, piki12, piki13, piki14, tref6, tref7, tref8, tref9, tref10,tref11,tref12,tref13,tref14); var arr2:Array = arr.slice(0,35) ; public function Kart() { } public function shest(dobavka:int):void { for (var i:int = 0; i < dobavka; i++) { feuf = feuf + 60; shet = Math.round((0 - (arr2.length-1)) * Math.random() + arr2.length-1); movi = new arr2[shet ]; trace(movi.name); addChild(movi); movi.x = feuf + 30; movi.y = 350; arr2.splice(shet,1); arr2.filter(removeEmpty); movi.addEventListener(MouseEvent.CLICK, click) } } function removeEmpty(a:Object, index:int, source:Array):Boolean { if (a is Number) { return true; } return false; } public function click(e:MouseEvent):void { e.target.y -= 70; e.target.removeEventListener(MouseEvent.CLICK, click); } } } package com.Script { import flash.display.MovieClip; import flash.display.Sprite; import flash.ui.Multitouch; import flash.events.MouseEvent; public class main extends MovieClip { var butto:circleflatbrown;//КнопКа из компонентов Flash IDE var _kart:Kart; var dobavka:int = 6; public function main() { butto = new circleflatbrown (); _kart = new Kart (); addChild(_kart); addChild(butto); butto.x =200; butto.y = 100; butto.addEventListener(MouseEvent.CLICK, sdat); } public function sdat(events:MouseEvent):void { if (_kart.cont.numChildren<=5) { dobavka -= _kart.numChildren; _kart.shest(dobavka); } } } } Последний раз редактировалось Кирилл63; 16.03.2011 в 14:22. |
|
|||||
|
1 - оформите код в AS3 а не PHP
2 - названия классов пишутся с большой буквы 3 - cont.addEventListener(MouseEvent.CLICK, click); нет необходимости делать много раз в цикле достаточно одного раза 4 - после первого же клика вы отписываетесь от события - вероятно в этом и ваша проблема Добавлено через 1 минуту и 5 - не пользуйтесь нативными кнопками Добавлено через 7 минут хотя по пункту 4 - я не прав, вы отписываетесь .. но не от того а вообще не понятно от чего, вообщем трейс вам в руки и почитайте как работают слушатели хелп
__________________
мира и гармонии |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 15
|
Делал все как вы сказали, но результат тот же. При нажатии на любую из 6-ти карт, координаты изменяются только для последней карты . Читаю хелп.
Последний раз редактировалось Кирилл63; 14.03.2011 в 23:20. |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 15
|
Исправлюсь.
|
|
|||||
|
Перечитайте ваш вопрос. Вы пишете что "слушатель почему то присваивается только последней карте !". Несмотря на то, что сама формулировка стремная, продолжим...
Далее вы пишете что "При нажатии на любую карту координаты изменяются только у последней !", тоесть "слушатель почему то присваивается ВСЕМ картам !", но в вашем обработчике (function click (e:MouseEvent)) меняется координата movi, а что у вас movi ? посмотрите в коде - верно это последняя созданная карта в цикле. попробуйте написать там e.target.y -= 70; и уберите отписывание непонятно от чего. и еще все переделайте ( : и пообещайте понять что же такое e.target успехов
__________________
мира и гармонии |
|
|||||
|
Потом в методе начинается цикл
а в теле цикла Вы 10 раз вызываете один и тот же cont: Цитата:
|
|
|||||
|
.
|
Хм, Кирилл исправился!
Цитата:
Пример button_1.addEventListener(MouseEvent.CLICK, handler_click); button_2.addEventListener(MouseEvent.CLICK, handler_click); ... button_N.addEventListener(MouseEvent.CLICK, handler_click); function handler_click(event:MouseEvent):void { trace( (event.targer as DisplayObject).name ); // хаха, одинаковые имена ) } |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
имена - это очень плохо
попробуйте сделать реализацию так, будто свойства .name в природе не существует
__________________
скриптограф |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|