доступ к обьектам на сцене из 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 на сцене в фла есть мувиклип класса Tank knebu, ты свой класс танка формируешь видимо так: Code public class Tank extends MovieClip а наверно больше подходит вот так: Code public class Tank extends KeyboardTank Т. е., тут он как мувиклип автоматом тоже снаследуется. Я глядя на твой приведённый код, тоже бы не понял, почему он не работает! Я учу эти классы, сам мучаюсь.
|
|
| |