PDA

Просмотр полной версии : Как узнать width и height клипа (MovieClip)


Visual
01.09.2008, 00:58
var movie:MovieClip = evt.target.loader.content.movie;
this.addChild(movie);
movie.x = movie.width/2;
movie.y = movie.height/2;;
movie.play();
trace(movie.width);
trace(movie.height);
В результате ролик играет нормально, но не могу получить высоту и ширину, чтоб выставить клип по координатам.

ramshteks
01.09.2008, 01:14
evt.target.loader.content.movie;
до крайности странная строчка...
я так понимаю вы Loader'ом грузите.
тогда скорее всего вместо этой строчки нужно вставить evt.target.content;
хотя может я ошибаюсь.
ичто значит не можете получить? что трейс выдает?

BlooDHounD
01.09.2008, 01:39
ramshteks, в данном случаи это будет одно и тоже.

Visual
01.09.2008, 02:09
Трейс выдает 0 0.
movie - название клипа из подгружаемой swf.
Как можно узнать размеры загруженой swf?

evt.target.content.width
evt.target.content.height
тоже не работает.

etc
01.09.2008, 02:20
А вы уверены, что на момент трейса, ролик уже загружен?

†‡Paladin‡†
01.09.2008, 02:31
Ну надо полюбому отлавливать initialize

Visual
01.09.2008, 02:32
Кусок из основного класса:
var map:GameLoader = new GameLoader("map.swf", 300, 300);
addChild(map);

Вот класс Лоадера:

package main{

import flash.display.Sprite;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.LocalConnection;
import flash.display.MovieClip;

public class GameLoader extends Sprite {
public var loader:Loader = new Loader();
private var loadStatus:TextField = new TextField();
private var preloader_mc:Preloader = new Preloader();
private var posX:int = 0;
private var posY:int = 0;

public function GameLoader(movie:String, x:int=0, y:int=0) {
var request:URLRequest = new URLRequest(movie);
posX = x;
posY = y;
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.OPEN,displayPreloader);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,updatePreloader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,displayMovie);
}

private function displayPreloader(evt:Event):void {

this.addChild(preloader_mc);
preloader_mc.x = 200;
preloader_mc.y = 200;

}
private function updatePreloader(evt:ProgressEvent):void {

var bytesLoaded:Number = evt.bytesLoaded;
var bytesTotal:Number = evt.bytesTotal;
var s:String = "";
var percent:Number = 0;
if (bytesTotal>0) {
percent = Math.floor(bytesLoaded/bytesTotal*100);
}
preloader_mc.txt.text=percent+"%";
preloader_mc.progressbar.gotoAndStop(percent+1);

}
private function displayMovie(evt:Event):void {

removeChild(preloader_mc);

var movie:MovieClip = evt.target.loader.content.movie;
this.addChild(movie);
movie.x = movie.width/2;
movie.y = movie.height/2;
movie.play();
trace(movie.width);
trace(movie.height);

loader.contentLoaderInfo.removeEventListener(Event.OPEN,displayPreloader);
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,updatePreloader);
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,displayMovie);

}
}
}

etc
01.09.2008, 03:10
Вероятно, в первом кадре этого мувика ничего нет.

Visual
01.09.2008, 03:20
Да, первый кадр пустой. И как лучше в таких случаях поступать ? Нарисовать в нем прозрачный прямоугольник?

enepx
01.09.2008, 07:39
Да, первый кадр пустой. И как лучше в таких случаях поступать ? Нарисовать в нем прозрачный прямоугольник?
Да, я так часто делаю. :)

etc
01.09.2008, 10:27
Да, первый кадр пустой. И как лучше в таких случаях поступать ? Нарисовать в нем прозрачный прямоугольник?
Ну например да.

charlyod
03.09.2008, 17:19
Подскажите пожалуйста,
Вызываю класс из примера,
var map:GameLoader = new GameLoader("background.swf", 300, 300);

вот в этом месте аидимо:
var movie:MovieClip = evt.target.loader.content.movie;
получаю ошибку

получаю следующую ошибку
ReferenceError: Error #1069: Property movie not found on Background and there is no default value.

charlyod
03.09.2008, 17:27
... хотя trace(evt.target.loader.content.width);
прекрасно работает ...

Visual
03.09.2008, 17:41
Подскажите пожалуйста,
Вызываю класс из примера,
var map:GameLoader = new GameLoader("background.swf", 300, 300);

вот в этом месте аидимо:
var movie:MovieClip = evt.target.loader.content.movie;
получаю ошибку

получаю следующую ошибку
ReferenceError: Error #1069: Property movie not found on Background and there is no default value.

"movie" название клипа (Instance Name) выложеного на основной таймлайн, в вашем случае в background.swf.

charlyod
03.09.2008, 18:15
Спасибо,
Работает, но если у клипа не прописан class в Symbol Propirties
Как только прописываю получаю вот такое:
TypeError: Error #1034: Type Coercion failed: cannot convert bgmv@1a280f51 to flash.display.MovieClip.

Вообще я все это делаю для того что-бы вызывать функцию из подгружаемого мувика :)

Visual
03.09.2008, 19:22
Смотри тогда эту темку:
http://www.flasher.ru/forum/showthread.php?t=115528