Просмотр полной версии : Почему не могу обратиться к свойству?
grafillo!
14.10.2013, 15:57
Не пойму, почему я не могу обратиться к аргументу foto через родителя - муви клип, пишет свойство неопределено((
var fotoMovie:MovieClip = new MovieClip;
fotoMovie.addChild(foto);
prvWidth = fotoMovie.foto.width;
prvX = fotoMovie.foto.x;
Если есть ссылка foto, то используйте ссылку.
var fotoMovie:MovieClip = new MovieClip;
fotoMovie.addChild(foto);
prvWidth = foto.width;
prvX = foto.x;
Или имя задайте.
var fotoMovie:MovieClip = new MovieClip;
fotoMovie.addChild(foto);
foto.name = "foto";
prvWidth = fotoMovie.foto.width;
prvX = fotoMovie.foto.x;
grafillo!
14.10.2013, 16:20
не, не помагает блин не могу понять в чём проблема, ведь foto это и есть имя лоадера, а обратиться к нему не могу(((function ldfoto (f:String) {
//trace ("свич"+_switch+"login"+lentaFoto[_switch].@login);
var foto:Loader = new Loader;
foto.load(new URLRequest(f)); // здесь нужно загружать фото
foto.contentLoaderInfo.addEventListener(Event.COMPLETE, addFirst);
function addFirst ():void{
if (foto.width > 100){
foto.width=100;
foto.scaleY = foto.scaleX;
}
if (foto.height>100){
foto.height=100;
foto.scaleX = foto.scaleY;
}
var fotoMovie:MovieClip = new MovieClip;
fotoMovie.addChild(foto);
fotoMovie.x =prvWidth+prvX+3;
fotoMovie.y = 100-fotoMovie.foto.height;
Потому что вложенные функции — Зло.
grafillo!
14.10.2013, 16:43
а что же делать? и в чём причина?
Вынести function addFirst ():void из функции ldfoto (f:String)
Причина проста — в момент, когда будет вызван addFirst (обработчик события), функция ldfoto уже отработает (это доли миллисекунд), и доступа к ее переменным больше не будет. А var foto это локальная переменная.
Добавлено через 4 минуты
И включите уже строгий режим компиляции. Ваш код невозможен. Позвольте компилятору указать на Ваши ошибки.
Например, Ваш обработчик не принимает параметр Событие. А должен.
grafillo!
14.10.2013, 17:55
Вынести function addFirst ():void из функции ldfoto (f:String) - это типа надо из функции ldfoto передать параметр в функцию addFirst ()?
а почему я вот так тоже не могу вызвать, объект foto, ведь он добавлен на сцену в мувеклипе и по идее должен иметь имя такое как при добавлении((
function lentaOver (e:MouseEvent){
e.target.foto.y = 200;
}
я посмарел у меня стоит строгий режим компиляции х)
Akopalipsis
14.10.2013, 18:22
Примерно вот так -
package
{
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLRequest;
public class NewClass extends Sprite
{
public function NewClass()
{
if (stage)init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var loader:Loader = new Loader();
super.addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_completeHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loader_ioErrorHandler);
try
{
loader.load(new URLRequest('img0.png'));
}
catch (error:Error)
{
trace(error.message);
}
}
private function loader_ioErrorHandler(event:IOErrorEvent):void
{
trace(event.type)
}
private function loader_completeHandler(event:Event):void
{
trace(event.type);
/**
* и вот тут уже делаете что Вам угодно с загруженным контентом
* обратится к loaderu - event.target
* обратится к контенту - event.target.content
*/
}
}
}
Bletraut
14.10.2013, 19:00
не, не помагает блин не могу понять в чём проблема, ведь foto это и есть имя лоадера, а обратиться к нему не могу(((function ldfoto (f:String) {
//trace ("свич"+_switch+"login"+lentaFoto[_switch].@login);
var foto:Loader = new Loader;
foto.load(new URLRequest(f)); // здесь нужно загружать фото
foto.contentLoaderInfo.addEventListener(Event.COMPLETE, addFirst);
function addFirst ():void{
if (foto.width > 100){
foto.width=100;
foto.scaleY = foto.scaleX;
}
if (foto.height>100){
foto.height=100;
foto.scaleX = foto.scaleY;
}
var fotoMovie:MovieClip = new MovieClip;
fotoMovie.addChild(foto);
fotoMovie.x =prvWidth+prvX+3;
fotoMovie.y = 100-fotoMovie.foto.height;
Всё потому что переменной foto присвоено значение лоудера, переменная не является свойством мувика fotoMovie, нужно либо найти ребенка через getChild, либо так на переменную foto и ссылаться.
grafillo!
14.10.2013, 19:05
вообщем с лоадером разобрался, нужно создать дисплей обжект и приравнять лоадер тогда норм можно через дисплей обж обращаться
возникает следующий вопрос, не могу обратиться к объекту лента текст добавленному в foto:MovieClip, те функция lentaOver не работает
function addLentaAtribute (foto:MovieClip){
var lentaTxt:lentaText = new lentaText;
lentaTxt.width = 300;
lentaTxt.y = 100;
foto.addChild(lentaTxt);
foto.addEventListener(MouseEvent.CLICK, openDialogWindow);
foto.addEventListener(MouseEvent.MOUSE_OVER, lentaOver);
foto.addEventListener(MouseEvent.MOUSE_OUT, lentaOut);
}
function lentaOver (e:MouseEvent){
e.target.lentaTxt.width = 200;
}
Bletraut
14.10.2013, 19:23
как так ссылаться то?
foto.width
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.