PDA

Просмотр полной версии : Функция с тач ивентом


Digital
18.09.2014, 03:47
Есть функция
private function tatu(e:TouchEvent):void
{

if (gold >= 50000)
{
tatE = true
gold -= 50000;
gps += 50;

tt.visible = true;
//marketI.tex2.text = String(gold);
//tex1.text = "руб." + gold.toString() + "+" + gps.toString() + "монет в секунду"
marketI.tt_b.removeEventListener(TouchEvent.TOUCH_TAP, tatu);
marketI.tt_b.play();
}
}
Вызывается слушателем событий кнопки. Но как вызвать эту функцию без события тач? При восстановлении из сохранения? нельзя написать, что если булиан тру, то tatu(), потому что она ожидает тач ивент. Что делать? Копии функций не предлагайте, ибо у меня таких больше 10, слишком *****код, костыли, громоздко

nubideus
18.09.2014, 05:09
шта
private function tatu(e:TouchEvent = null):void

КорДум
18.09.2014, 10:43
Или
tatu(null);

Digital
18.09.2014, 12:04
Спасибо!

in4core
18.09.2014, 14:12
или dispatchEvent(new TouchEvent(TouchEvent.SOME))

GBee
18.09.2014, 15:52
давайте уж все варианты:

private function tatu():void
{
//блаблабла
}

private function touched(e:TouchEvent):void
{
tatu();
}

MikroAcse
18.09.2014, 16:54
давайте уж все варианты:

private function tatu():void
{
//блаблабла
}

private function touched(e:TouchEvent):void
{
tatu();
}
Наилучший.

Gerbert
18.09.2014, 17:11
Наилучший.
Чем же? Хандлер это обычный метод, что плохого в вызове с null?

Zebestov
18.09.2014, 17:18
Тем, что в теле хендлера логично производить операции, завязанные на событие. Но если там есть еще действия, которые непосредственно к событию не относятся и, более того, порой выполняемые в произвольный момент времени, то логично вынести их в отдельный метод. Это структурирует код и прояснит логику работы приложения.

MikroAcse
18.09.2014, 17:19
Чем же? Хандлер это обычный метод, что плохого в вызове с null?
В том, что вызывать хандлеры как минимум неправильно.
Это не хуже, конечно, ничем, кроме того момента, когда понадобится вызывать функцию с аргументами.
Если хочешь - вызывай, твоё дело.

GBee
18.09.2014, 17:47
Наилучший.
Зависит от обстоятельств. Если метода тату под пару вызовов, то смысл отдельно писать обертку хендлером. Строгих правил нет. Программисты анархисты, но даже из хаоса рождается порядок.

Gerbert
18.09.2014, 18:14
Тем, что в теле хендлера логично производить операции, завязанные на событие.
Согласен! Пару дней назад вдруг вспомнилось, что где-то читал о логике в хандлерах, но обоснования не помнил.
А сейчас кажется, что Ваши слова и были в тех статьях обоснованием.

dimarik
22.09.2014, 22:20
давайте уж все варианты:

private function tatu():void {
//блаблабла
}

private function touched(e:TouchEvent):void {
tatu();
}

Достаточно долгий. Вызов дополнительного метода накладывает на производительность. Я не говорю за user interaction. Пользователь туп и слаб, он не сможет сделать наш день, т.е. много раз не тапнет, чтобы всё повисло. Но вот сам компьютер может это сделать быстрее. И он делает, например, на... Ну сами придумайте такие варианты. У меня, например, событие "addedToStage" из-за глубоких и широких деревьев трансформировалось из метода addEventListener в метод protected addedToStage у базового класса. Иначе вызов всех таких листенеров в подклассах как пуля в спину. Правда, чутка пришлось пожертвовать приоритетами событий и принципами подхода в разработке компонентов.