Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Во Flex sdk не работает MouseEvent.MOUSE_DOWN (http://www.flasher.ru/forum/showthread.php?t=203641)

Ioangum 02.10.2013 14:38

Во Flex sdk не работает MouseEvent.MOUSE_DOWN
 
Здавствуйте! Во Flex не срабатывает событие MOUSE_DOWN. Точнее, когда запускаю проект, то никаких ошибок не вылазит, и всё успешно запускается; но приложение ну совсем никак не реагирует на клик мышкой.
У меня есть объект M, который добавляет объект S: stage.addChild(S). M же графики никакой не содержит. Вот что находится внутри S:
Код AS3:

import flash.display.Sprite;
import flash.display.Stage;
import flash.events.Event;
import flash.events.MouseEvent;
 
public dynamic class S extends Sprite
        {
 
                public function S() {
                        graphics.drawRect(0, 0, 1080, 780);
                        addEventListener(Event.ADDED_TO_STAGE, onAddStage);
                }
 
                private function onAddStage(e:Event):void {
                        addEventListener(MouseEvent.MOUSE_DOWN, startDr);
                        trace(parent);
                }
 
                private function startDr(e:MouseEvent):void {
                        trace("!!!!!!!!!!!!!!!!!!!!!!!!!");
                        var r:Shape = new Shape();
                        r.x = 350;
                        r.y = 250;
                        r.graphics.beginFill(0x33FF33);
                        r.graphics.drawRect(0, 0, 100, 100);
                        r.graphics.endFill();
                        addChild(r);
                        startDrag();
                }
 
        }

И, когда нажимаю кнопкой мыши на экране приложения, ничего не происходит. Если же добавлять слушателя Stage, то всё работает:
Код AS3:

stage.addEventListener(MouseEvent.MOUSE_DOWN, startDr);

. Но мне вот нужно сделать не через Stage. Помогите, пожалуйста, добрым советом! Спасибо

AlexLucas 02.10.2013 15:31

Код AS3:

public function S() {
graphics.beginFill(0xff0000); //вот это добавьте -это определяет заливку, graphics.lineStyle(..) определяет контур
                        graphics.drawRect(0, 0, 1080, 780);
                        addEventListener(Event.ADDED_TO_STAGE, onAddStage);
                }

Вас не удивило что вы не видите на экране того прямоугольника что вы нарисовали ? :)
Он у вас без заливки и контура, соответственно по нему вы не кликните.

Ioangum 02.10.2013 15:39

Да точно, тупанул... Прошу прощения за такой глупый вопрос!

Akopalipsis 02.10.2013 15:50

Цитата:

Но мне вот нужно сделать не через Stage.
Цитата:

У меня есть объект M, который добавляет объект S: stage.addChild(S).
На самом деле вешать слушателя на стейдж - это хорошо ЭТО ПЛОХО!!!!, а вот добавлять stage.addChild(S) - это плохо.

KumoKairo 02.10.2013 16:00

Цитата:

На самом деле вешать слушателя на стейдж - это хорошо
Слушателя клика мыши? :D
Вот будет здорово если я вместо того, чтобы повесить слушатели на кнопки, повешу их на стейдж))

Akopalipsis 02.10.2013 16:24

я хотел сказать, что на стейдж вешать слушателей более приемлемо, чем добавлять на неё обьекты.
Цитата:

Вот будет здорово если я вместо того, чтобы повесить слушатели на кнопки, повешу их на стейдж))
А что такого страшного может произойти? я просто правда не знаю, расскажите, а то может и в правду нельзя...

KumoKairo 02.10.2013 16:32

Цитата:

я хотел сказать, что на стейдж вешать слушателей более приемлемо, чем добавлять на неё обьекты.
Я воспринимаю это так - "Я не могу добавить на стейдж объект, поэтому лучше добавлю туда слушатель." :)
"Я не могу пройти по соседскому газону, поэтому лучше поставлю туда тумбочку"

Цитата:

А что такого страшного может произойти? я просто правда не знаю, расскажите, а то может и в правду нельзя...
Ну есть у вас кнопка, вам нужно отследить нажатие на эту кнопку и выполнить какой - то код) А вы вместо того, чтобы отслеживать нажатие на кнопку, отслеживаете нажатие на весь экран. :D

Представте что у вас есть кнопка "закрыть приложение", а срабатывает она при нажатии на любую область экрана. Я бы сошел с ума от такой программы)

Akopalipsis 02.10.2013 16:58

А если есть десять кнопок, то лучше десять слушателей или один слушатель на стедж?
Или если нужно вообще весь экран отслеживать на клик? Вот вообще весь, то так всё равно нельзя?

Добавлено через 7 минут
Цитата:

Я воспринимаю это так - "Я не могу добавить на стейдж объект, поэтому лучше добавлю туда слушатель."
Этими словами Вы приравняли добавить на стейдж обьект с добавить на стейдж слушатель.
я точно знаю, что добавлять на стейдж обьекты - нельзя! Недавно столкнулся с проблемой, на которую мне посоветовали повесить слушателя на стейдж. По Вашему это медвежий совет? Или слушать клавиатуру со стейджа === добавить десять классов на стейдж ?

Ioangum 02.10.2013 17:52

А почему добавлять объекты на стейдж плохо? Чем это черевато-то?

AlexCooper 02.10.2013 20:41

Akopalipsis на стейдж лучше вешать события MOUSE_MOVE, MOUSE_UP. И то не всегда. Всё если у Вас 10 кнопкок, то лучше создать контейнер и вешать на него события MOUSE_DOWN, etc...

Ioangum
Цитата:

А почему добавлять объекты на стейдж плохо? Чем это черевато-то?
Плохо в минимальном понимании инкапсуляцией. То-есть тем что у Вас объект стает доступным из любого места программы. Более правильно я считаю использовать DisplayObjectConteiner и в него рисовать графику.


Часовой пояс GMT +4, время: 14:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.