| доступ к обьектам на сцене из As файла. | 
|  | 
| 
| ggman | Дата: Понедельник, 20 Февраля 2012, 17:56 | Сообщение # 1 |  |   постоянный участник Сейчас нет на сайте | Понемногу перехожу на работу во внешних AS файлах. На сцене есть объект. Когда я пробую что-то с ним сделать из внешнего файла, получаю сообщения об ошибках.
 Как правильно обращаться к обьекту на сцене из AS файла?
 |  |  |  |  | 
| 
| iLORd | Дата: Понедельник, 20 Февраля 2012, 18:43 | Сообщение # 2 |  | заслуженный участник Сейчас нет на сайте | Используй getChildByName(); В частности, у меня довольно часто гуй лежит прямо на сцене, а работаю я с ним из внешнего .as. Выглядит это так:
 
 public var gui;
 gui = MovieClip(root).getChildByName("ololoGui");
 
 И дальше уже можно просто обращаться к любым внутренним объектам просто через gui.*
 
 Bread Games - пилим ураганный экшен!
 |  |  |  |  | 
| 
| ggman | Дата: Понедельник, 20 Февраля 2012, 21:28 | Сообщение # 3 |  |   постоянный участник Сейчас нет на сайте | Спасибо. А переменная gui какого типа? 
 ------
 
 Что-то компилятору слово root не нравиться.
 
 
 Сообщение отредактировал ggman - Понедельник, 20 Февраля 2012, 21:33 |  |  |  |  | 
| 
| iLORd | Дата: Понедельник, 20 Февраля 2012, 21:42 | Сообщение # 4 |  | заслуженный участник Сейчас нет на сайте | Quote (ggman) А переменная gui какого типа?А я не задавал тип явно, компилятор сам разбирается)
 
 
 Quote (ggman) Что-то компилятору слово root не нравиться.Должен нормально воспринимать, по идее. Может дело в том, как у меня символы раскиданы, попробуй напрямую getChildByName сделать.
 
 Bread Games - пилим ураганный экшен!
 |  |  |  |  | 
| 
| ggman | Дата: Понедельник, 20 Февраля 2012, 22:09 | Сообщение # 5 |  |   постоянный участник Сейчас нет на сайте | Не работает, теперь пишет про вызов неопределенного типа. бред какой-то, а если убрать root то пишет о том что неправильное количество елементов. С root же пишет что : "обращение несуществующего свойства root". Может я что-то подключить забыл?
 
 Вот все подключенные библиотеки:
 import flash.events.Event;
 import flash.utils.Timer;
 import Storm.SAchievement;
 import flash.utils.Timer;
 import flash.events.TimerEvent;
 import flash.display.Sprite;
 import flash.display.MovieClip;
 import flash.display.Stage;
 import fl.transitions.TweenEvent;
 import fl.transitions.Tween;
 import fl.transitions.easing.*;
 
 
 Сообщение отредактировал ggman - Понедельник, 20 Февраля 2012, 22:10 |  |  |  |  | 
| 
| iLORd | Дата: Понедельник, 20 Февраля 2012, 22:43 | Сообщение # 6 |  | заслуженный участник Сейчас нет на сайте | Quote (ggman) а если убрать root то пишет о том что неправильное количество елементов.Эм... Просто убрал рут? Я имел в виду, что просто вот так написать: gui = getChildByName("ololoGui");
 
 Bread Games - пилим ураганный экшен!
 |  |  |  |  | 
| 
| ggman | Дата: Понедельник, 20 Февраля 2012, 23:48 | Сообщение # 7 |  |   постоянный участник Сейчас нет на сайте | Я же говорю, если написать так, то будет вызов неопределенного типа. |  |  |  |  | 
| 
| iLORd | Дата: Понедельник, 20 Февраля 2012, 23:50 | Сообщение # 8 |  | заслуженный участник Сейчас нет на сайте | Шайтан... Иерархия во Флеше всегда была моим слабым местом. Чуть попозже попробую посмотреть, что у меня там ещё есть... Хотя, вроде, всё должно работать и так( 
 Bread Games - пилим ураганный экшен!
 |  |  |  |  | 
| 
| knebu | Дата: Вторник, 28 Февраля 2012, 19:19 | Сообщение # 9 |  | был не раз Сейчас нет на сайте | обращение к обьекту из внешнего АS происходит через слово this,как я понял.вот я например хотел сделать себе АS,который управлял бы Keyboard,скросостью и ускорением,и чтоб можно было просто подключать его к своему спрайту(машине) в fla,но када компилю ниче не происходит,были ошибки,но я их исправил,терь ошибок нет,но всеравно ниче не происходит   а если напрямую вписать код в fla,то все работает.странно блин.мож имеет значение такие вещи,как static и dynamic?
 Добавлено (28.02.2012, 19:16)---------------------------------------------
 
 Code package  { 
 import flash.events.KeyboardEvent;
 import flash.events.Event;
 import flash.display.Stage;
 import flash.ui.Keyboard;
 import flash.display.MovieClip;
 
 public class KeyboardTank extends MovieClip {
 
 public var keyPressed:uint;
 public var rightKeyIsDown:Boolean;
 public var leftKeyIsDown:Boolean;
 public var speed:Number = 5;
 
 public function KeyboardTank():void {
 // constructor code
 rightKeyIsDown = false;
 leftKeyIsDown = false;
 
 this.addEventListener(KeyboardEvent.KEY_DOWN,pressKey);
 this.addEventListener(KeyboardEvent.KEY_UP,releaseKey);
 this.addEventListener(Event.ENTER_FRAME,moveTank);
 }
 public function pressKey(e:KeyboardEvent):void{
 keyPressed = e.keyCode;
 if(keyPressed == Keyboard.D){
 rightKeyIsDown = true;
 }
 if(keyPressed == Keyboard.A){
 leftKeyIsDown = true;
 }
 
 }
 public function releaseKey(e:KeyboardEvent):void{
 var thisKey:uint = e.keyCode;
 if(thisKey == Keyboard.D){
 rightKeyIsDown = false;
 }
 if(thisKey == Keyboard.A){
 leftKeyIsDown = false;
 }
 }
 public function moveTank(e:Event):void{
 if(rightKeyIsDown){
 this.x += speed;
 }
 if(leftKeyIsDown){
 this.x -= speed;
 }
 }
 }
 }
Добавлено (28.02.2012, 19:19)---------------------------------------------
 на сцене в фла есть мувиклип класса Tank и базовый класс KeyboardTank.как его заставить слушать этот класс?
 |  |  |  |  | 
| 
| dapon | Дата: Понедельник, 05 Марта 2012, 07:42 | Сообщение # 10 |  | уже был Сейчас нет на сайте | Пропишите имя экземпляра добавленного на сцену. |  |  |  |  | 
| 
| sht_aleks | Дата: Четверг, 08 Марта 2012, 13:14 | Сообщение # 11 |  | был не раз Сейчас нет на сайте | Quote на сцене в фла есть мувиклип класса Tankknebu, ты свой класс танка формируешь видимо так:
 
 Code public class Tank extends MovieClipа наверно больше подходит вот так:
 
 Code public class Tank extends KeyboardTankТ. е., тут он как мувиклип автоматом тоже снаследуется.
 Я глядя на твой приведённый код, тоже бы не понял, почему он не работает! Я учу эти классы, сам мучаюсь.
 |  |  |  |  |