Пятница, 29 Ноября 2024, 03:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Вопрос по взаимодействию экземпляров между собой.
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, естественно

wacko
и тебе не кажется странным, что ты обращаешься к переменной которая объявлена совсем в другом классе?
ладно, напиши в конструкторе Main вот так: button.addEventListener(MouseEvent.CLICK, circle.clicked)
OwlotronДата: Понедельник, 30 Декабря 2013, 19:50 | Сообщение # 19
был не раз
Сейчас нет на сайте
Нет, мне не кажется странным. Мне нужно, чтобы событие в одном экземпляре класса вызывало действия в другом экземпляре другого класса. Мне нужно, чтобы нажатие на кнопку выполняло функцию перемещения кружка. При чём здесь вообще Main и его слушатель? Может, у меня десяток кнопок, и только одна кнопка этот конкретный кружок двигает. Мне что, писать отдельный класс на эту кнопку? Тыкать слушатель в Main? Я задал вопрос, как наиболее оптимально реализовать обработку события одного класса другим. Мне пытаются ответить на совсем другой вопрос, который я не задавал.
cyrilДата: Вторник, 31 Декабря 2013, 00:23 | Сообщение # 20
был не раз
Сейчас нет на сайте
Цитата Owlotron ()
Тыкать слушатель в Main?

biggrin не на Main, а на кнопку.
Есть одно надежное на 100% решение... Опиши переменную как public static var myVar в классе Main и обращайся к ней Main.myVar, так ее будет везде видно.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг