Форум 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=179905)

Euler 23.05.2012 23:18

Поиск объектов
 
Добрый день. Появилось желание отредактировать интерфейс во flash-приложении. К сожалению с flash и as3 раньше не сталкивался и за весь день так и не нашёл ответа на свой вопрос. Я "подключаюсь" к флешке как рассказано в этой статье, проблема в получении доступа к внутренним объектам целевого приложения.
Например там есть поле ввода пароля(объект класса NTextField) и я хочу что бы при вводе был виден пароль, для этого нужно изменить свойство displayAsPassword, а для этого нужно получить доступ к этому объекту.

wvxvw 24.05.2012 01:21

А ник-то какой замечательный... Сказать честно - темы связанные с декомпиляцией и потенциально вредящие другим людям тут не приветствуются. Правила многих игр предусматривают санкции за автоматизацию игры и рассценивают это как нарушение соглашения пользователя.
Конечно, не исключено, что вы это делаете в целях самообразования, и что разработчики игры вовсе не против, но во избежание неприятных ситуаций, я бы все таки попросил, чтобы вы по крайней мере описали о какой игре идет речь, и что именно вы пытаетесь сделать.

Euler 24.05.2012 02:56

Спасибо за ответ.
Цитата:

Сообщение от wvxvw (Сообщение 1081033)
Сказать честно - темы связанные с декомпиляцией и потенциально вредящие другим людям тут не приветствуются. Правила многих игр предусматривают санкции за автоматизацию игры и рассценивают это как нарушение соглашения пользователя.

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

Сообщение от wvxvw (Сообщение 1081033)
Конечно, не исключено, что вы это делаете в целях самообразования, и что разработчики игры вовсе не против, но во избежание неприятных ситуаций, я бы все таки попросил, чтобы вы по крайней мере описали о какой игре идет речь, и что именно вы пытаетесь сделать.

Разработчики не против- я в их игры не играю:). Мне нужно изменить "дизайн" сайта, сделав нечто вроде автозаполнения формы. Конкретный пример я приведу только завтра, а то сейчас у нас уже 2 часа ночи- пора спать.

Добавлено через 19 часов 30 минут
Итак, максимально упрощённая форма ввода будет выглядеть вот так:
Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.text.TextField;
        import flash.text.TextFieldType;
        import flash.events.MouseEvent;
        import flash.events.TextEvent;
        import flash.events.Event;
        import flash.ui.Mouse;
        import flash.ui.MouseCursor;
 
        [SWF(width="300", height="200")]
 
        public class Window extends MovieClip
        {
                protected var edit:TextField;
                protected var button:TextField;
 
                public function Window()
                {
                        var w:uint = root.stage.stageWidth, h:uint = stage.stageHeight;
                        edit = new TextField();
                        edit.x = 75;
                        edit.y = 70;
                        edit.width = 150;
                        edit.height = 20;
                        edit.background = true;
                        edit.backgroundColor = 0xFFFF00;
                        edit.type = TextFieldType.INPUT;
                        addChild(edit);
                        button = new TextField();
                        button.x = 75;
                        button.y = 110;
                        button.width = 150;
                        button.height = 20;
                        button.background = true;
                        button.backgroundColor = 0xFF0000;
                        button.htmlText = "<p align='center'>Ввод</p>";
                        button.addEventListener(MouseEvent.CLICK, Click);
                        button.addEventListener(MouseEvent.MOUSE_OVER, Over);
                        addChild(button);
                        stage.focus = edit;
                }
 
                private function Click(e:MouseEvent):void
                {
                        //отправка данных
                        edit.text = "";
                        stage.focus = edit;
                        return;
                }
 
                private function Over(e:MouseEvent):void
                {
                        Mouse.cursor = MouseCursor.ARROW;
                        return;
                }
        }
}

А нужно добавить возможность автозаполнения, примерно так:
Код AS3:

package 
{
        //тут всё как прежде
 
        public class Window extends MovieClip
        {
                protected var edit:TextField;
                protected var button:TextField;
 
                public function Window()
                {
                        //тут прежний код
                        MyFunc(); // а эта функция в моём загрузчике и выполняется при событии "allComplete"
                }
                //дальше опять прежний код
                //а все переменные ниже, должны находится в моём загрузчике
                private var arr:Vector.<String>;
                protected function GetElem(arr:Vector.<String>, str:String):String
                { //разумеется это просто заглушка, каждый раз перебирать весь массив я не стану :)
                        for(var i:int=0;i<arr.length;i++)
                        {
                                if(arr[i].substr(0, str.length)==str)
                                {
                                        return arr[i];
                                }
                        }
                        return "";
                }
                public function MyFunc():void
                {
                        arr = new Vector.<String>();
                        edit.addEventListener(Event.CHANGE, ChangeText); //вот тут вся проблема- edit не найти.
                        button.addEventListener(MouseEvent.CLICK, PreClick, false, 1); // ну и button, разумеется, тоже.
                }
                private function ChangeText(e:Event):void
                {
                        var t:String = edit.text;
                        var len:int = t.length;
                        var str:String = GetElem(arr, t);
                        if(str!="")
                        {
                                edit.text = str;
                                edit.setSelection(len, edit.text.length);
                        }
                }
                private function PreClick(e:MouseEvent):void
                {
                        if((edit.text!="")&&(GetElem(arr, edit.text)=="")) // опять же- edit'а нету...
                        {
                                arr.push(edit.text);
                        }
                }
        }
}


Euler 28.05.2012 01:15

Спасибо всем кто пытался помочь, проблема была решена следующим образом- в функцию getLoaderInfoByDefinition передаётся любой класс из целевого приложения, а через возвращённый LoaderInfo добираемся до stage, который и будет основным классом приложения.


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

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