Вопрос по взаимодействию экземпляров между собой.
|
|
Owlotron | Дата: Среда, 25 Декабря 2013, 10:45 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Собственно, прочёл книги по флешу, пересмотрел всякие уроки, но так и не нашёл конкретного ответа на вопрос. Каким именно способом можно сделать следующее(и возможно ли вообще?):
Создаётся класс Main, который создаёт две переменных. В этих переменных экземпляры моих классов кнопка(myVar1) и кружок(myVar). Я добавляю слушатель клика мышью на кнопку. Обработчик находится в теле кружка и двигает его по экрану. Как мне написать ссылку на обработчик, если конструкция вида addEventListener(MouseEvent.CLICK, myVar.clicked) не даёт скомпилировать в строгом режиме?
Сообщение отредактировал Owlotron - Среда, 25 Декабря 2013, 10:58 |
|
| |
triptix | Дата: Среда, 25 Декабря 2013, 12:06 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| я не профи, но сделал бы обработчик снаружи, зачем каждой кнопке класс прописывать? Хотя в твоем случае тоже должно работать, надо целиком код смотреть.
Код addEventListener(MouseEvent.CLICK,clicked)
function clicked(){ if(myVar1.hitTestPoint(mouseX,mouseY)){ myVar1.x+=50
}
}
|
|
| |
Owlotron | Дата: Среда, 25 Декабря 2013, 12:25 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Видимо, меня не так поняли. У меня есть куча кнопок, все они экземпляры класса Кнопка. Я добавляю слушатель на одну, совершенно определённую КНОПКУ, а обработчик добавляю на КРУЖОК. Кружок это отдельный от кнопки класс. Так вот, можно ли как-то этот обработчик задействовать, не получая ошибки компиляции? Есть вариант с диспетчированием события до основного класса, а потом по цепочке вниз. Но хочется попроще, чтобы не писать десять функций и не передавать целевой объект по функциям. Хочется просто указать метод в экземпляре класса.
|
|
| |
mistervektor | Дата: Среда, 25 Декабря 2013, 13:54 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| попробуй все классы сделать публичными.(классы цепочки)
Сообщение отредактировал mistervektor - Среда, 25 Декабря 2013, 13:55 |
|
| |
Owlotron | Дата: Воскресенье, 29 Декабря 2013, 12:53 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Естественно, все классы публичны и методы тоже публичны. Добавлено (29.12.2013, 12:53) --------------------------------------------- В общем, сделал рассылку события из обработчика, потом на это событие поставил ещё один обработчик. Не понятно, зачем так усложнять, писать лишний код. Но другого способа так и не нашёл.
|
|
| |
cyril | Дата: Воскресенье, 29 Декабря 2013, 14:25 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| но это должно работать. напиши текст ошибки
|
|
| |
Owlotron | Дата: Воскресенье, 29 Декабря 2013, 17:40 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Какой именно ошибки?
|
|
| |
cyril | Дата: Понедельник, 30 Декабря 2013, 00:14 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| ошибки, из-за которой не удается написать addEventListener(MouseEvent.CLICK, myVar.clicked). компилятор же пишет ошибку
|
|
| |
Owlotron | Дата: Понедельник, 30 Декабря 2013, 01:23 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| 1120: Access of undefined property circ.
|
|
| |
triptix | Дата: Понедельник, 30 Декабря 2013, 02:00 | Сообщение # 10 |
постоянный участник
Сейчас нет на сайте
| Доступ к неопределенному свойству. Ты обработчику аттрибут public добавил? public function cliked(){...
|
|
| |
Owlotron | Дата: Понедельник, 30 Декабря 2013, 11:20 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| Ну конечно добавил.
|
|
| |
cyril | Дата: Понедельник, 30 Декабря 2013, 14:56 | Сообщение # 12 |
был не раз
Сейчас нет на сайте
| Цитата cyril ( ) addEventListener(MouseEvent.CLICK, myVar.clicked) Цитата Owlotron ( ) 1120: Access of undefined property circ. все ясно. у тебя неправильная область видимости myVar.
|
|
| |
Owlotron | Дата: Понедельник, 30 Декабря 2013, 17:00 | Сообщение # 13 |
был не раз
Сейчас нет на сайте
| Чтобы было понятнее, CIRC заменить на myVar. По сути, в программе имя переменной CIRC, а в описании темы myVar. Но принцип от этого не изменяется. Переменная myVar расположена в конструкторе класса Main.
Сообщение отредактировал Owlotron - Понедельник, 30 Декабря 2013, 17:02 |
|
| |
cyril | Дата: Понедельник, 30 Декабря 2013, 17:50 | Сообщение # 14 |
был не раз
Сейчас нет на сайте
| компилятор не может найти переменную с именем myVar. так понятно? это значит ты ее неправильно объявил. все переменные объявленые внутри функций видимы только в этих функциях
|
|
| |
Owlotron | Дата: Понедельник, 30 Декабря 2013, 18:11 | Сообщение # 15 |
был не раз
Сейчас нет на сайте
| У меня нет ни одной переменной, объявленной внутри функции. Всего три класса, основной Main, класс кнопки Button, класс кружка Circle. В основном классе объявляются две переменных, каждая из них это экземпляр одного из двух классов. Эти переменные объявлены до описания конструктора. Конструктор основного класса всего лишь добавляет переменные в список отображения. И да, я ошибся, они ДЕЙСТВИТЕЛЬНО вне конструктора. У всех функций, классов и переменных атрибут публичный. И пишет, что не определено свойство myVar. 1120: Access of undefined property myVar.
|
|
| |
cyril | Дата: Понедельник, 30 Декабря 2013, 18:25 | Сообщение # 16 |
был не раз
Сейчас нет на сайте
| слушатель ты где добавляешь?
|
|
| |
Owlotron | Дата: Понедельник, 30 Декабря 2013, 18:43 | Сообщение # 17 |
был не раз
Сейчас нет на сайте
| В классе Button, естественно. А обработчик в классе Circle.
Сообщение отредактировал Owlotron - Понедельник, 30 Декабря 2013, 18:44 |
|
| |
cyril | Дата: Понедельник, 30 Декабря 2013, 19:10 | Сообщение # 18 |
был не раз
Сейчас нет на сайте
| Цитата Owlotron ( ) В классе Button, естественно и тебе не кажется странным, что ты обращаешься к переменной которая объявлена совсем в другом классе? ладно, напиши в конструкторе Main вот так: button.addEventListener(MouseEvent.CLICK, circle.clicked)
|
|
| |
Owlotron | Дата: Понедельник, 30 Декабря 2013, 19:50 | Сообщение # 19 |
был не раз
Сейчас нет на сайте
| Нет, мне не кажется странным. Мне нужно, чтобы событие в одном экземпляре класса вызывало действия в другом экземпляре другого класса. Мне нужно, чтобы нажатие на кнопку выполняло функцию перемещения кружка. При чём здесь вообще Main и его слушатель? Может, у меня десяток кнопок, и только одна кнопка этот конкретный кружок двигает. Мне что, писать отдельный класс на эту кнопку? Тыкать слушатель в Main? Я задал вопрос, как наиболее оптимально реализовать обработку события одного класса другим. Мне пытаются ответить на совсем другой вопрос, который я не задавал.
|
|
| |
cyril | Дата: Вторник, 31 Декабря 2013, 00:23 | Сообщение # 20 |
был не раз
Сейчас нет на сайте
| Цитата Owlotron ( ) Тыкать слушатель в Main? не на Main, а на кнопку. Есть одно надежное на 100% решение... Опиши переменную как public static var myVar в классе Main и обращайся к ней Main.myVar, так ее будет везде видно.
|
|
| |