С Новым годом! Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 27

Как скрыть мувик при клике по нему?

21.05.2012, 13:30. Показов 1934. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые программисты подскажите, пожалуйста. Во вложении swf. Сетка из мувиклипов. При клике в любом месте появляется меню. У меня проблема в том, чтоб при клике по той же центральной ячейке, мувик анимировано скрывался. Подскажите начинающему! Спасибо!

Вот код основного класса:

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package main 
{
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event; 
    import flash.events.MouseEvent;
    import flash.ui.Mouse;
 
    
    
    
    public class Main extends Sprite
    {
        var NUM_ROWS = 20;
        var NUM_COLUMS = 40;
        public static const CELL_WIDTH:int = 70;
        public static const CELL_HEIGHT:int = 60;
        public var bg_image:BgImage = new BgImage;
        
        
 
        public function Main() {
            //масштабирование и ориентация
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            stage.addEventListener(Event.RESIZE, resizeListener);
 
            //добавляем ячейки
            createCells();
        
        }
    
        //функция изменения размера swf
        private function resizeListener(e:Event):void
        {
            bg_image.x = stage.stageWidth;
            bg_image.y = stage.stageHeight;
            bg_image.height = stage.stageHeight;
            bg_image.scaleX = bg_image.scaleY;
        }
        
        //функция создания ячеек
        private function createCells():void
        {
            var isPairRow:Boolean = false;
            var xOffset:int = CELL_WIDTH / 2;
            var yOffset:int = CELL_HEIGHT;
            for (var i:int = 0; i < NUM_ROWS; i++)
            {
                for (var j:int = 0; j < NUM_COLUMS; j++)
                {
                    
                    var blocks:Blocks = new Blocks();
                    blocks.x = j * CELL_WIDTH;
                    
                    if (isPairRow)
                    {
                        blocks.x += xOffset;
                    }
                    
                    blocks.y = i * yOffset;
                    
                    stage.addChild(blocks);
                    
                }
                isPairRow = !isPairRow;
            }
        }
        
 
        
    }
}
А это класс самих ячеек. Сюда добавил функцию вызова меню.

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package main
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;
    
    public class Blocks extends Sprite
    {
        private var _startAlpha: Number = 0.6;
        private var _startWidth: Number = 70;
        private var _startHeight: Number = 60;
        private var _fading:Boolean = false;
        
        public function Blocks()
        {
            alpha = _startAlpha;
            addEventListener(MouseEvent.MOUSE_OVER, overHandler);
            addEventListener(MouseEvent.MOUSE_OUT, outHandler);
            addEventListener(MouseEvent.CLICK, clickHandler);
            
        }
        //функция при наведении
        protected function overHandler(event:MouseEvent):void
        {
            alpha = 0;
        
        }
        //функция при уведении
        protected function outHandler(event:MouseEvent):void
        {
            addEventListener(Event.ENTER_FRAME, fadeAlpha);
            
        }
        //возвращаем альфа
        protected function fadeAlpha(event:Event):void
        {
            alpha += 0.05;
            if (alpha >= _startAlpha){
                removeEventListener(Event.ENTER_FRAME, fadeAlpha);
                _fading = false;
            }
        }
        
        //вызываем меню
        protected function clickHandler(event:MouseEvent):void
        {
            var menu:Menu = new Menu;
            stage.addChild(menu);
            menu.x = event.target.x;
            menu.y = event.target.y;
            
            
        }
    }
}
Вложения
Тип файла: swf Blocks.swf (785.9 Кб, 23 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2012, 13:30
Ответы с готовыми решениями:

Как сделать информационное окно, которое при клике по нему мышью не будет активировано?
Здравствуйте! Подскажите, можно ли сделать так, чтобы при нажатии на любом месте окна оно не активировалось? В идеальном же случае...

Как скрыть форму при клике вне её
Привет, ребят :) Тема такая, есть приложение, которое вызывается из трея нажатием на иконку, но и убирается оно так же, а хотелось бы,...

Как скрыть поле ID специальности в таблице, и при этом иметь возможность обращаться к нему
Visible = false; //Не помогает Даже пытался при попытке считывания делать Visible=true а потом сразу же false. Но такой фокус тоже не...

11
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
21.05.2012, 13:41
jork, создай приватную булевую переменную, котораая будет отображать состояние ячейки. Если открыто - закрываем, если закрыто - открываем.
Если при клике по другой ячейке необходимо закрыть текущую - задавай ссылку на последнюю выбранную ячейку, тогда ее можно закрыть принудительно.
0
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 27
21.05.2012, 15:13  [ТС]
Пробовал так, но не получилось. А ещё, у мивика анимация есть. Т.е. с 1 по 6 кадр - открытие, а с 6 по 12 закрытие. Как сделать чтоб при клике переходил к нужному кадру? Как это в кадрах сделать я знаю gotoAndPlay, а вот как в классах правильно не получается.
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        
 
//вызываем меню
        protected function clickHandler(event:MouseEvent):void
        {
            if (!menuExist){
            var menu:Menu = new Menu;
            stage.addChild(menu);
            menu.x = event.target.x;
            menu.y = event.target.y;
            menuExist=true;
            }
            else {
            stage.removeChild(menu);
            menuExist=false;
            }
            
        }
Добавлено через 1 час 14 минут
подскажите ещё пожалуйста, имеет значение в каком классе добавлять меню? в классе ячеек или в главном классе?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
21.05.2012, 21:03
jork, в приведенном примере menu - приватная переменная, которая не видна за пределами обработчика. И даже если обработчик выполняется несколько раз, то если там это переменная и присутствует, то ссылается она уже на другой объект. Вынеси ее в поле класса (при такой реализации) и создавай при необходимости только один раз.
На счет реализации и 2-го вопроса. В идеале обращение к stage должно происходить в минимальном количестве случаев: когда мы подписываемся на специфические для stage-а события (KeyboardEvent к примеру), для получения ряда специфических свойств (ширина и высота сцены), может есть еще какие ситуации, нужно посмотреть документацию класса Stage, его отличия от того же Sprite-а, но мне ими пользоваться еще не приходилось. Во всех остальных случаях обращение должно происходить либо к текущему объекту, либо к объектам, ссылки на которые у текущего объекта имеются (читай, созданы в нем). Из этого правила могут быть исключения, например, при создании объектов, суть которых - управление другими объектами (такие себе контроллеры), но в этом случае еще больше внимания необходимо уделять удалению и созданию объектов, чтобы избежать неконтролируемого роста памяти при работе приложения.
0
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 27
21.05.2012, 22:25  [ТС]
Спасибо за развернутый ответ! Но к сожалению не всё уловил. Я только начинающий, и въехать в это всё что-то реально сложно самому.
Может по-другому. Вот пример того как я хочу сделать http://nicolasvo.com/ Только там пункты меню сразу видны, а я хочу чтоб они появились при клике. И при клике по центральной ячейке скрылись. Но не просто исчезли, а как-то анимировать скрытие. Я решил что анимацию я сделаю в fla файле к экземпляру символа, и появление и исчезновение с помощью свойства альфа.
То что у меня на данный момент получилось во вложении.
Но как теперь сделать чтоб при клике на центральную ячейку оно проигрывало анимацию и удалялось после этого я догнать не могу. Подскажите пожалуйста! Или я не правильно всё изначально делаю? Может нужен другой подход?
Вот код основного класса:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package main 
{
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;
    import main.Menu;
    
    
    
    public class Main extends Sprite
    {
        var NUM_ROWS = 20;
        var NUM_COLUMS = 40;
        public static const CELL_WIDTH:int = 70;
        public static const CELL_HEIGHT:int = 60;
        public var bg_image:BgImage = new BgImage;
        public var menu:Menu = new Menu;
        public var menuExist:Boolean=false;
 
        public function Main() {
            //масштабирование и ориентация
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            stage.addEventListener(Event.RESIZE, resizeListener);
 
            //создаем сетку
            createNet();
            //добавляем ячейки
            createCells();
        
        }
 
        //функция изменения размера swf
        private function resizeListener(e:Event):void
        {
            bg_image.x = stage.stageWidth;
            bg_image.y = stage.stageHeight;
            bg_image.height = stage.stageHeight;
            bg_image.scaleX = bg_image.scaleY;
        }
 
        //функция создания сетки
        private function createNet():void
        {
            
            var isPairRow:Boolean = false;
            var xOffset:int = CELL_WIDTH / 2;
            var yOffset:int = CELL_HEIGHT;
            
            for (var i:int = 0; i < NUM_ROWS; i++)
            {
                for (var j:int = 0; j < NUM_COLUMS; j++)
                {
                    
                    var net:NET = new NET();
                    net.x = j * CELL_WIDTH;
                    
                    if (isPairRow)
                    {
                        net.x += xOffset;
                    }
                    
                    net.y = i * yOffset;
                    
                    stage.addChild(net);
                    //net.addEventListener(MouseEvent.CLICK, showMenu);
                }
                isPairRow = !isPairRow;
            }
        }
 
        //функция создания ячеек
        private function createCells():void
        {
            
            var isPairRow:Boolean = false;
            var xOffset:int = CELL_WIDTH / 2;
            var yOffset:int = CELL_HEIGHT;
            
            for (var i:int = 0; i < NUM_ROWS; i++)
            {
                for (var j:int = 0; j < NUM_COLUMS; j++)
                {
                    
                    var blocks:Blocks = new Blocks();
                    blocks.x = j * CELL_WIDTH;
                    
                    if (isPairRow)
                    {
                        blocks.x += xOffset;
                    }
                    
                    blocks.y = i * yOffset;
                    
                    stage.addChild(blocks);
                    blocks.addEventListener(MouseEvent.CLICK, showMenu);
                }
                isPairRow = !isPairRow;
            }
        }
 
        //вызываем меню
        private function showMenu(event:MouseEvent):void
        {   
            if(!menuExist){
                stage.addChild(menu);
                menu.gotoAndPlay(1);
                menu.x = event.target.x;
                menu.y = event.target.y;
                menuExist=true;
            }
            else{
                menu.gotoAndPlay(7);
                menuExist=false;
                }
            
        }
    }
}
Вложения
Тип файла: swf Blocks.swf (809.0 Кб, 10 просмотров)
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
21.05.2012, 22:44
Зачем так?
ActionScript 3
1
stage.addChild(blocks);
Можно ведь так.
ActionScript 3
1
addChild(blocks);
Зачем так?
ActionScript 3
1
blocks.addEventListener(MouseEvent.CLICK, showMenu);
Ведь все равно клик произойдет по ячейке.
ActionScript 3
1
addEventListener(MouseEvent.CLICK, showMenu);
и далее в обработчике
ActionScript 3
1
2
3
4
var block:Blocks = e.target as Blocks;
if(!block){
   return;//на всякий случай обрабатываем ситуацию, если клик произошел все же не по тому объекту, по которому рассчитывали
}
Таким образом мы имеем один слушатель, а не 100500.
В отношении анимации - она слишком простая, что бы для таких целей использовать IDE (хотя и допустимо), если не планируется ее усложнения, то можно было бы воспользоваться твинером (TweenNano, Tweensy, Tweener и пр.)
Необходима отлавливать начало и окончание анимации (не важно, твинером или покадрово в IDE), это опять же могут быть флаги по типу menuExist.
Если покадрово, то необходимо на время анимации подписываться на ENTER_FRAME и отслеживать кадры (по номеру или по имени).
1
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 27
21.05.2012, 23:11  [ТС]
TanaTiX, я благодарен Вам за помощь! но получается что она не очень эффективна
про слушатели понял. но что делать с кодом в обработчике непонятно. я так и не понял как скрыть меню при клике на него. вы могли бы поконкретнее. может есть примеры где про такое можно почитать и посмотреть.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
22.05.2012, 09:49
jork, будет время, постараюсь написать.
Для понимания того, что делается бывает очень полезно нарисовать схему - что, куда и когда и пройтись по ней несколько раз для того, чтобы понять где какие условия вставить, а где какие переменные добавить.
1
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 27
22.05.2012, 11:00  [ТС]
TanaTiX, ок. спасибо!
я извиняюсь что задаю много вопросов. разобраться хочется. а оф. документация сложная для понимания начинающему. тем более не программисту.
Вопрос по анимации. Если она не сложная (как здесь http://nicolasvo.com/ например), лучше её делать программно?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
22.05.2012, 11:21
jork, если анимация заключается только в изменении alpha, то да. Отображение мувиков в таком случае более затратно для процессора. Но все необходимо смотреть по обстоятельствам. Бывает что и, казалось бы, простая анимация может обернуться неплохой головной болью ввиду наличия каких-то второстепенных факторов.
1
5 / 5 / 0
Регистрация: 07.04.2012
Сообщений: 12
22.05.2012, 13:28
Вот я сделал небольшой шаблон. Разбирайся, спрашивай если что
Вложения
Тип файла: swf TestMenu.swf (3.8 Кб, 14 просмотров)
Тип файла: rar TestMenu.rar (67.8 Кб, 8 просмотров)
1
0 / 0 / 0
Регистрация: 21.06.2010
Сообщений: 27
22.05.2012, 13:45  [ТС]
GGringo, просто огромнейшее человеческое спасибо!! буду разбираться!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2012, 13:45
Помогаю со студенческими работами здесь

Как скрыть все DIV кроме заданного ID при клике?
Здравствуйте, на странице есть меню-фильтр из ссылок вида: &lt;a href=&quot;#nomer1&quot;&gt;Фильтр1&lt;/a&gt; &lt;a...

Как при клике скрыть текст и вместо него показать другой?
Всем привет! Есть кнопка(&lt;input type=&quot;button&quot; /&gt;). Как сделать чтобы при клике по этой кнопке, пропал текст в блоке &lt;div&gt; и вместо...

Как вложить мувик в мувик?
Как в AS3 сделать такое? attachMovie (&quot;pole&quot;,&quot;pole&quot;,1); pole.attachMovie(&quot;fishka&quot;,&quot;fishka&quot;+1,2); ну и потом обратиться к этому...

Очистить TextBox при клике по нему
Доброго времени суток! Необходимо очистить TextBox при клике по нему,либо при вводе в него нового текста. Подскажите, пожалуйста, как...

WebBrowser, как при клике на ссылку с файлом скрыть окно выбора действия (открыть, сохранить)
Доброго времени суток, товарищи! Разрабатываю простенький html-браузер на C#. По сути все нужные функции реализованы в самом компоненте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru