PDA

Просмотр полной версии : Доступ к объектам в разных фреймах


Galleon
09.02.2008, 03:41
Создал я Document class, добавил мувик в первый фрейм, всё отлично, доступ к нему из Document class есть по name.
Потом перешёл на следуйщий фрейм и добавил ещё один мувик, как получить к нему доступ с Document class ?

BlooDHounD
09.02.2008, 12:13
точно так же как и в первом кадре.

Galleon
09.02.2008, 13:52
BlooDHounD, нет не точно также.
Код:

package main{
import flash.display.MovieClip;
import flash.text.TextField;
public class test1 extends MovieClip {
public function test1() {
trace(tx);
tx.text = "Hello!";
}
}
}

Вывод:

null
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at main::test1$iinit()

Текстовое поле tx находится во втором фрейме мувика.

Я перетащил его из библиотеки на таймлайн во второй кадр. Неужели к нему нельзя получить доступ програмно?

etc
09.02.2008, 14:10
А где у вас объявлена переменная-ссылка на TextField?
Для получения доступа к полю, надо перейти на второй кадр, если оно во втором кадре. А так вы пытаетесь выйти на втором этаже, не поднимаясь с первого на второй.
И ещё, кто вас так классы научил называть?

Galleon
09.02.2008, 14:37
А где у вас объявлена переменная-ссылка на TextField
Во втором фрейме есть текстовое поле, в панеле Properties я задаю ему имя tx. Потом пытаюсь обратится к нему из класа Document class. Если текстовое поле находится в первом фрейме, то проблем нет, а во втором не неходит.
Для получения доступа к полю, надо перейти на второй кадр, если оно во втором кадре. А так вы пытаетесь выйти на втором этаже, не поднимаясь с первого на второй.
Вы имеете ввиду gotoAndStop(2)? А нелзя обратится как-то так: frame2.tx?
И ещё, кто вас так классы научил называть?
Переделаный пример Hello World с вашего форума))

BlooDHounD
09.02.2008, 14:43
а у вас она существует до тех пор пока вы не перешли на второй кадр? у меня бы не существовала.

etc
09.02.2008, 19:40
Во втором фрейме есть текстовое поле, в панеле Properties я задаю ему имя tx.
Это за вас CS3 объявляет поля, что есть зло. Отключайте автоматическое объявление полей-ссылок на DisplayObject-ы, иначе при использовании любого нормального редактора AS3-кода, у вас сразу же посыпятся ошибки.

Вы имеете ввиду gotoAndStop(2)? А нелзя обратится как-то так: frame2.tx?
Нельзя. Вы пытаетесь из одной комнаты достать вещь из другой, не входя в неё.

Переделаный пример Hello World с вашего форума))
Значит его надо удалить.

Galleon
09.02.2008, 21:01
__etc, спасибо!
Работает код:
package main{
import flash.display.MovieClip;
import flash.text.TextField;
public class TestFrame extends MovieClip {
public function TestFrame() {
this.gotoAndStop(2);
tx.text = "Hello!";
}
}
}

Это за вас CS3 объявляет поля, что есть зло. Отключайте автоматическое объявление полей-ссылок на DisplayObject-ы, иначе при использовании любого нормального редактора AS3-кода, у вас сразу же посыпятся ошибки.
А как иначе получить ссылку на DisplayObject ? Если я его добавлял не программно, а перетаскиванием из библиотеки на таймлайн?

BlooDHounD
09.02.2008, 21:39
getChildByName

etc
10.02.2008, 02:03
getChildByName
Либо отключить автоматическое объявление переменных и указать их самому. Но нельзя вообще не указывать, что есть минус для CS3.

IYAKOV
11.02.2008, 12:22
Либо отключить автоматическое объявление переменных ...
это снять галочку на Automatic Identation ?

etc
11.02.2008, 12:42
это снять галочку на Automatic Identation ?
Вы это наугад по знакому слову решили спросить или может быть все-таки стоит перевести?

IYAKOV
13.02.2008, 00:07
Я вопрос к теме спросить. Вы сказали, что можно отключить автоматическое объявление переменных. Вот и спрашиваю. А то я просто видел в настройках и спросил то или не то?
Так где можно отключить авто определение переменных?

etc
13.02.2008, 00:11
Я вопрос к теме спросить. Вы сказали, что можно отключить автоматическое объявление переменных. Вот и спрашиваю. А то я просто видел в настройках и спросил то или не то?
Так где можно отключить авто определение переменных?
А я восклицательный знак к теме восклицаю.
Вы переводить тексты в интерфейсе программы пробовали?

IYAKOV
13.02.2008, 11:01
Там много тектов... Потиху читаю тьюториал и изучаю кнопочки :)

IYAKOV
14.02.2008, 10:12
Так как отключить авто определение переменных, чтобы самому присваивать когда делаешь addChild()??? весь интерфейс абшастал - не нашел, может еще не привык к новому?? Ато имя "инстанс42" мне не нравится и все время меняется(

etc
14.02.2008, 10:53
Автоопределение переменных-ссылок отключается в настройках ActionScript проекта.
Только причем тут автоопределение и имена клипов?

IYAKOV
14.02.2008, 22:13
значит я не про то говорю((

А что делать с именами клипов которые я добавляю с помощью addChild() - они автоматически имеют вид "instanceЧисло". Этим можно как-то управлять? Дать нужное имя добавляемому элементу? Чтобы можно было обратиться к нему из другого места кода по имени(не "instanceЧисло")?

etc
15.02.2008, 00:08
name является сеттером и геттером.
Если имя никем не задано, оно генерируется автоматически. Имя не может быть null.

IYAKOV
15.02.2008, 22:53
спасибо, понял 8)

der hund
05.08.2008, 16:38
Я вроди все делаю так, но ничего не получается...
Перехожу в кадр а оно всеравно не находит.

der hund
05.08.2008, 17:20
Сделал gotoAndStop и всеравно нет доступа, все уже перепробывал...
Может чтото не так делаю?

Tsaf
04.03.2009, 13:20
Есть мувик к его TextField прекращается доступ после перехода на ключевой кадр этого мувика
package app{

import flash.display.*;
import flash.text.TextField;

public class Main extends MovieClip {

public function Main(){
movi.gotoAndStop("f7"); //всё работает если только f7 не
movi.txt.text = "Hello!"; //ключевой кадр в мувике
this.gotoAndStop(1);
}

}
}
если переходим к ключевому кадру то...
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at app::Main$iinit()
Подскажите в чём искать проблему