Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как управлять мышкой програмно? (http://www.flasher.ru/forum/showthread.php?t=188304)

Nickolai 01.12.2012 15:13

Как управлять мышкой програмно?
 
Как сделать так чтобы мышка прошла по определенной траектории(но на самом деле она стояла на месте)? Она как бы прошла по траектории для программы, а для юзера она стоит на месте!

Tails 01.12.2012 15:21

Нарисуйте курсор, и пустите его по траекторий, при этом скрыв системный курсор.

Nickolai 01.12.2012 16:10

Курсор должен быть настоящий, то есть если ты им навел на что-то, то это что-то должно реагировать на него. Для юзера курсор на месте стоит. Или скажем мне надо чтобы несколько объектов среагировали будто на них навели и убрали курсор

Tails 01.12.2012 16:27

Я ничего не понял, скажу вот что:
Управлять системным курсором нельзя, его можно лишь скрыть/отобразить. Но вы можете нарисовать свой Sprite в виде курсора и привязать его по x, y к настоящему, скрытому курсору.

Nickolai 01.12.2012 16:49

Надо чтобы несколько объектов среагировали будто на них навели курсор.

Tails 01.12.2012 17:03

Вызовите их обработчик события:
Код AS3:

myMouseListener(null);

Если в обработчике используется объект события, то сперва создайте этот объект:
Код AS3:

var e:MouseEvent = new MouseEvent(MouseEvent.CLICK);
myMouseListener(e);

Не забудьте заполнить свойства объекта события (e), которые будет использовать обработчик события.

spirit2 01.12.2012 17:10

Ну так отслеживайте положение "спрайта-курсора" и при пересечении с объектами меняйте их состояние, на то, которое хотите видеть, если бы навели курсор.

Nickolai 01.12.2012 19:12

У меня объектом является кнопка:
Код AS1/AS2:

b_page = visual.getChildByName("b_page") as SimpleButton;
b_page.addEventListener(MouseEvent.CLICK, btnClickHandler);

Что мне делать, чето я вообще не рублю?!)

Tails 01.12.2012 19:59

Код AS3:

b_page = visual.getChildByName("b_page") as SimpleButton;
b_page.addEventListener(MouseEvent.CLICK, btnClickHandler);
 
btnClickHandler(null); // Вызов обработчика клика, как-если бы мы кликнули


Dip52 01.12.2012 20:43

Вложений: 1
Код AS3:

//Объявляю пакет:
package src
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.ui.Mouse;
        import flash.display.Shape;
 
        //Объявляю класс:
        public class MouseCursorClass extends MovieClip
        {
                //Определяю класс Shape (для рисования):
                var shape:Shape = new Shape();
                //Определяю и устанавливаю класс objectMouseCursor:
                var mouseCursor:objectMouseCursor = new objectMouseCursor();
                //Объявляю конструктор:
                public function MouseCursorClass()
                {
                        //Задаю толщину и цвет линий:
                        shape.graphics.lineStyle(0,0x000000);
                        //Определяю как квадрат:
                        shape.graphics.drawRect(0,0,200,200);
                        //Добавляю на сцену квадрат:
                        this.addChild(shape);
 
                        //Скрываю настоящий курсор мышки:
                        Mouse.hide();
 
                        //Добавляю на сцену аналог курсора мышки:
                        stage.addChildAt(mouseCursor,1);
                        //Запрещаю аналогу курсора мышки быть видимым для настоящего курсора мышки:
                        this.mouseCursor.mouseEnabled = false;
 
                        //Определяю событие обновления кадров:
                        stage.addEventListener(Event.ENTER_FRAME, updateFrames);
                        //Определяю событие нажатия кнопки мыши:
                        addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
                }
                //Объявляю функцию для события обновления кадров:
                public function updateFrames(event:Event):void
                {
                        //Если курсор мышки находится внутри зоны действия, то:
                        if(mouseX > 0 && mouseX < 200 && mouseY > 0 && mouseY < 200)
                        {
                                //Изменяю координату y у аналога курсора мышки:
                                mouseCursor.y = mouseY;
                                //Изменяю координату x у аналога курсора мышки:
                                mouseCursor.x = mouseX;
                        }
                }
                //Объявляю функцию для события нажатия кнопки мыши:
                public function mouseDown(event:Event):void
                {
                        //Определяю "условие":
                        switch(event.target.name)
                        {
                                //Если настоящим курсором мышки был нажато на объект test, то:
                                case 'test':
                                //Вывожу информирование:
                                trace("Ура. Свершилось чудо! Курсор мышки находясь в зоне действия совершил нажатие объекта test.");
                                break;
                        }
                }
        }
}

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

Wolsh 01.12.2012 21:08

Mouse#registerCursor()

Nickolai 02.12.2012 00:03

Вложений: 1
Я собственно пытаюсь создать переключатель страниц. Всего 4 страницы. Принцып такой: есть 4 кнопки b_page1, b_page2, b_page3 ... , сверху кнопок наложено 4 текстовых поля: NumberPage1 ... NumberPage4. При нажатие на текстовое поле происходи алгоритм заложенный в функции ButtonPage(); Так как в кнопках нет такой фнции(или я ее не нашел, или я ее не понял) - кнопка находится в нажатом состоянии(скажем я щелку по ней она приняла состояние), я ее отпустил, она приняла другое состояние(первоначальное), то я делаю свое, при нажатие на кнопку я удаляю кнопку удаляю ее текстовое поле, добавляю кнопку добавляю фото этой же кнопки в включенном состояние, и сверху текстовое поле. Все совершенно хорошо работает, я рад, но есть одно но. Допустим я включил приложение, автоматически у меня кнопка 1 включена, я нажимаю на кнопку 2, все норм, нажимаю на кнопку 3, кнопка 3 включается, а кнопка 2 переходит в состояние будто на ней находится мышка. Если провести мышкой по кнопке 2, то все становится норм. Вот если кто поможет мне предложить более короткий вариант моей реализации, или же как-то исправить проблему(кнопка 2 переходит в состояние будто на ней находится мышка). Буду очень признателен, ниже изложу часть кода...

Код AS1/AS2:

package{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.TextField;
        import flash.utils.getDefinitionByName;
        import flash.display.SimpleButton;
        import flash.events.MouseEvent;
        import flash.text.TextFieldType;
        import fl.text.TLFTextField;
        import flash.display.DisplayObject;
 
 
        /**
        * ...
        * @author Анохин Николай
        */

        public class Main extends Sprite {
 
                public function Main():void {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }       
 
                //------------Scrolling--------------------
                private var scroller:UIScrollBar;
                //-----------------------------------------
 
                //----------Button-------------------------
                private var pageButton1:ButtonPageNext;
                private var pageButton2:ButtonPageNext;
                private var pageButton3:ButtonPageNext;
                private var pageButton4:ButtonPageNext;
                private var b_page1:SimpleButton;
                private var b_page2:SimpleButton;
                private var b_page3:SimpleButton;
                private var b_page4:SimpleButton;
                private var b_pageOn:SimpleButton;
                //------------------------------------------
 
 
                //-------------Кнопки-переключатели страниц--------------------------
                public function ButtonPage():void{
 
                        if(pageButton1.play == "on"){
                                onClickPageButton(pageButton1.number);
 
                                if(pageButton1.number != 1){
                                        pageButton1.play        = "off";
                                        pageButton2.play        = "on";
                                        pageButton3.play        = "off";
                                        pageButton4.number        = pageButton3.number;
                                        pageButton3.number        = pageButton2.number;
                                        pageButton2.number        = pageButton1.number;
                                        pageButton1.number        = pageButton1.number-1;       
                                } else {
                                        pageButton1.play        = "on";
                                        pageButton2.play        = "off";
                                        pageButton3.play        = "off";
                                        //--Зажигаем кнопку--
                                        visual.removeChild(DisplayObject(b_page1));
                                        visual.removeChild(DisplayObject(NumberPage1));
                                        visual.addChild(b_page1);
                                        visual.addChild(visual.b_pageOn1);
                                        visual.addChild(NumberPage1);
                                        //-------------------
                                }
                        } else {
                                //--Тушим кнопку--
                                visual.addChild(b_page1);
                                visual.addChild(NumberPage1);
                                //----------------
                        }
 
                        if(pageButton4.play == "on"){
                                onClickPageButton(pageButton4.number);
 
                                pageButton2.play        = "off";
                                pageButton3.play        = "on";
                                pageButton4.play        = "off";
                                //--Зажигаем кнопку--
                                pageButton1.number        = pageButton2.number;
                                pageButton2.number        = pageButton3.number;
                                pageButton3.number        = pageButton4.number;
                                pageButton4.number        = pageButton4.number+1;
                                //--------------------
                        } else {
                                //--Тушим кнопку--
                                visual.addChild(b_page4);
                                visual.addChild(NumberPage4);
                                //----------------
                        }
 
                        if(pageButton2.play == "on"){
                                onClickPageButton(pageButton2.number);
                                pageButton1.play == "on";
                                pageButton1.play == "off";
                                pageButton3.play == "on";
                                pageButton3.play == "off";
                                pageButton4.play == "on";
                                pageButton4.play == "off";
                                //--Зажигаем кнопку--
                                visual.removeChild(DisplayObject(b_page2));
                                visual.removeChild(DisplayObject(NumberPage2));
                                visual.addChild(b_page2);
                                visual.addChild(visual.b_pageOn2);
                                visual.addChild(NumberPage2);
                                //-------------------
                        } else {
                                //--Тушим кнопку--
                                visual.addChild(b_page2);
                                visual.addChild(NumberPage2);
                                //----------------
                        }
 
                        if(pageButton3.play == "on"){
                                onClickPageButton(pageButton3.number);
 
                                //--Зажигаем кнопку--
                                visual.removeChild(DisplayObject(b_page3));
                                visual.removeChild(DisplayObject(NumberPage3));
                                visual.addChild(b_page3);
                                visual.addChild(visual.b_pageOn3);
                                visual.addChild(NumberPage3);
                                //-------------------
                        } else {
                                //--Тушим кнопку--
                                visual.addChild(b_page3);
                                visual.addChild(NumberPage3);
                                //----------------
                        }
 
                        visual.NumberPage1.text = "" + pageButton1.number;
                        visual.NumberPage2.text = "" + pageButton2.number;
                        visual.NumberPage3.text = "" + pageButton3.number;
                        visual.NumberPage4.text = "" + pageButton4.number;
                }
                //-------------------------------------------------------------------
 
                public function onClickPageButton(_pageButton:Number):void{
 
                }
 
                //-------------Добавляем кнопки основные--------------------------------
                public function addButon():void{
 
                        //-----переключатели страниц----------------------------------
 
                        b_page1 = visual.getChildByName("b_page1") as SimpleButton;
                        b_page1.addEventListener(MouseEvent.CLICK, btnClickHandler);
 
                        b_page2 = visual.getChildByName("b_page2") as SimpleButton;
                        b_page2.addEventListener(MouseEvent.CLICK, btnClickHandler);
 
                        b_page3 = visual.getChildByName("b_page3") as SimpleButton;
                        b_page3.addEventListener(MouseEvent.CLICK, btnClickHandler);
 
                        b_page4 = visual.getChildByName("b_page4") as SimpleButton;
                        b_page4.addEventListener(MouseEvent.CLICK, btnClickHandler);
 
 
                        NumberPage1 = visual.NumberPage1;       
                        NumberPage1.mouseEnabled = false;
 
                        NumberPage2 = visual.NumberPage2;
                        NumberPage2.mouseEnabled = false;
 
                        NumberPage3 = visual.NumberPage3;
                        NumberPage3.mouseEnabled = false;
 
                        NumberPage4 = visual.NumberPage4;
                        NumberPage4.mouseEnabled = false;
                }
                //----------------------------------------------------------------------
 
                //-------------Реакция на нажатие кнопок--------------------------------
                private function btnClickHandler(e:MouseEvent):void {
                        switch (e.currentTarget) {
                        case b_page1:               
                                pageButton1.play = "on";
                                pageButton2.play = "off";
                                pageButton3.play = "off";
                                pageButton4.play = "off";
                                ButtonPage();
                        break;
                        case b_page2:
                                pageButton1.play = "off";
                                pageButton2.play = "on";
                                pageButton3.play = "off";
                                pageButton4.play = "off";
                                ButtonPage();
                        break;
                        case b_page3:                       
                                pageButton1.play = "off";
                                pageButton2.play = "off";
                                pageButton3.play = "on";
                                pageButton4.play = "off";       
                                ButtonPage();
                        break;
                        case b_page4:                       
                                pageButton1.play = "off";
                                pageButton2.play = "off";
                                pageButton3.play = "off";
                                pageButton4.play = "on";
                                ButtonPage();
                        break;
                        }
                }
                //-----------------------------------------------------------------------
 
 
        }
}


Wolsh 02.12.2012 00:19

Я Вам советовал неделю назад написать СВОЮ кнопку.
Послушали бы совета тогда — сейчас уже было бы готово.

SimpleButton такой simple... что Вы хотите от ПРОСТОЙ кнопки? Напишите свою с тогглингом состояний, лейблами, состоянием "disabled" и возможностью добавлять иные вкусняшки (анимированные плавные переходы состояний? ..например) в любое время.

Nickolai 02.12.2012 14:13

Не, ну по сути то получилось. Только одна фигня осталась, она не изменилась бы даже если бы я создавал так как советывали вы. Подскажите как убрать эту тему? Я думаю что можно сделать будто на все кнопки навели курсор и сразу же убрали, тогда бы все кнопки вспыхивали, и не было бы такой проблеммы. Но как это сделать не знаю.

caseyryan 02.12.2012 15:14

Все это можно и нужно реализовывать со своей кнопкой. Стандартные компоненты во флеше вообще не айс.

Nickolai 02.12.2012 16:46

Не ребят ну хватит петь. Вы мне скажите конретно по сути дела, как это исправить можно? есть же функции специальные?


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

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