Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SlyX

Problema com SWF externo

Recommended Posts

Seguinte, eu tenho um swf que ta funcionando normalmente (ele tem como document class o Carousel)

o SWF isolado funciona perfeitamente, mas quando eu puxo ele para dentro do meu palco (com URLRequest) ele me da o seguinte erro:

 

TypeError: Error #1009: Cannot access a property or method of a null object reference.
	at Carousel()

alguem tem ideia do que seja? se precisar posso postar alguns códigos

 

estou carregando o swf assim:

 

var conteudo:MovieClip = new MovieClip();
conteudo.x = 74;
conteudo.y = 60;
addChild(conteudo);

var _loader:Loader;
function setupLoader():void {
	_loader = new Loader();
	_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
	_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
	conteudo.addChild(_loader);
}

function loadProgress(event:ProgressEvent):void {
	var percentLoaded:Number = event.bytesLoaded/event.bytesTotal;
	percentLoaded = Math.round(percentLoaded * 100);
//	trace("Loading: "+percentLoaded+"%");
}

function loadComplete(event:Event):void {
//	trace("Complete");
}

setupLoader();


function abrirConteudo(file:String):void {
	_loader.load(new URLRequest(file));
}

abrirConteudo('carousel.swf');

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem?

 

código do caroussel

 

package
{
	import flash.display.Sprite;
	import flash.display.MovieClip;

	// for the xml file
	import flash.net.URLLoader;
	import flash.net.URLRequest;

	// events
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.events.IOErrorEvent;
	import flash.events.MouseEvent;

	import flash.display.Loader;
    import flash.display.LoaderInfo;

	// graphics
	import flash.filters.BlurFilter;

	public class Carousel extends Sprite
	{

		private var xml:XML;
		private var it:Array = new Array(); // Item Array

		private	var numOfItems:Number;
		private var radiusX:Number = 200;
		private var radiusY:Number = 30;
		private var centerX:Number = (stage.stageWidth/2) - 60;
		private var centerY:Number = (stage.stageHeight/2) - 130;
		private var speed:Number = 0.04;
		private var perspective:Number = 20;
		private var angle:Number;
		
		private var imgLoader:Loader;

		public function Carousel()
		{
			loadXML();

		}

		private function loadXML():void
		{
			var loader:URLLoader = new URLLoader();
			loader.load(new URLRequest("carousel.xml"));
			loader.addEventListener(Event.COMPLETE, loadItens);
		}

		private function loadItens(e:Event):void
		{
			
			
			// pull in the xml file and load the song data
			xml = new XML(e.target.data);
			var imglist:XMLList = xml.item.@image;

			numOfItems = imglist.length();
			var ttlist:XMLList = xml.item.@titulo;
			
			for(var i=0;i<numOfItems;i++)
			{
				angle = i * ((Math.PI*2)/numOfItems);
				it.push(new Item(imglist[i],angle));
				// Load in the image
            	imgLoader = new Loader();
            	imgLoader.load(new URLRequest(it[i].earl));
				// add to stage
				addChild(it[i]);
				// add image loader to the new mc
				it[i].addChild(imgLoader);
			}

			// animate
			addEventListener(Event.ENTER_FRAME, mover);

			// capture mouse events
			stage.addEventListener(MouseEvent.MOUSE_MOVE, adjustSpeed);
		}

		private function imageLoaded(e:Event):void
		{
			addChild(imgLoader);
		}

		private function mover(e:Event):void
		{
			for ( var b=0; b < it.length; b++ )
			{
				// xpos
				it[b].x = Math.cos(it[b].itemAngle) * radiusX + centerX;

				// ypos
				it[b].y = (Math.sin(it[b].itemAngle) * 0 + centerY);
//				it[b].y = Math.sin(it[b].itemAngle) * radiusY + centerY;

				// perspective
				var s = ((Math.sin(it[b].itemAngle) * radiusY + centerY) - perspective)/(centerY+radiusY-perspective);
				it[b].scaleX = it[b].scaleY = s;

				// update
				it[b].itemAngle+= speed;
			}

			// rearrange
			sortZ();
		}

		private function sortZ():void
		{
			it.sortOn("scaleX"); // re arrange by X scale in ascending order, by default

			for(var i:uint = 0; i < numOfItems; i++)
			{
				setChildIndex(it[i], i);
			}
		}

		private function adjustSpeed(m:MouseEvent):void
		{
			speed = (mouseX-centerX)/2500;
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, eu tenho um swf que ta funcionando normalmente (ele tem como document class o Carousel)

o SWF isolado funciona perfeitamente, mas quando eu puxo ele para dentro do meu palco (com URLRequest) ele me da o seguinte erro:

 

TypeError: Error #1009: Cannot access a property or method of a null object reference.
	at Carousel()

alguem tem ideia do que seja? se precisar posso postar alguns códigos

 

estou carregando o swf assim:

 

var conteudo:MovieClip = new MovieClip();
conteudo.x = 74;
conteudo.y = 60;
addChild(conteudo);

var _loader:Loader;
function setupLoader():void {
	_loader = new Loader();
	_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
	_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
	conteudo.addChild(_loader);
}

function loadProgress(event:ProgressEvent):void {
	var percentLoaded:Number = event.bytesLoaded/event.bytesTotal;
	percentLoaded = Math.round(percentLoaded * 100);
//	trace("Loading: "+percentLoaded+"%");
}

function loadComplete(event:Event):void {
//	trace("Complete");
}

setupLoader();


function abrirConteudo(file:String):void {
	_loader.load(new URLRequest(file));
}

abrirConteudo('carousel.swf');

não sou nenhuma experte em AS3 mais não consegui achar quem esta executando a função abrirConteudo()

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que vi, o erro esta na inicialização das variáveis, nessa parte:

 

private var centerX:Number = (stage.stageWidth/2) - 60;
private var centerY:Number = (stage.stageHeight/2) - 130;

 

você esta acessando o "stage", o problema é que essa propriedade só esta

acessível quando o obejto esta palco, ou depois do addChild

 

 

para resolver de forma simples, use um evento para saber quando o objeto foi adicionado

 

ficaria assim:

 

public function Carousel()
{
					
    addEventListener( Event.ADDED_TO_STAGE, init)

}
				
				
public function init(e:Event):void
{
	centerX = (stage.stageWidth/2) - 60;
	centerY = (stage.stageHeight/2) - 130;
	loadXML();
}

 

 

só isso

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.