Ir para conteúdo

POWERED BY:

Arquivado

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

linoart

[Resolvido]como fazer resize só no background?

Recommended Posts

Preciso colocar uma foto como background de um site. Como serão 5 imagens escolhidas aleatóriamente preferi fazer uma classe separada para elas.

Essas imagens fazem resize de largura e altura. Só que no swf que chama a classe dessas imagens existem objetos no palco, e quando o diminuo a tela no resize esses objetos diminuem, o que não era pra acontecer, pois só as imagens deveriam alterar a largura e altura.

 

Daí fui ver que isso ocorre pq causa da classe dessas imagens, então coloquei as imagens pra carregar na mesma classe desses objetos e os objetos pararam de diminuir.

 

Queria saber pq isso ocorre? Algo me diz que é pq estou usando ADDED_TO_STAGE.

E qual a forma de isso não acontecer usando uma classe separada?

 

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, se você identificou que o problema é a classe, e você fez a classe não bastaria informar que não quer que a imagem redimensione?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas se a imagem pega toda a janela do brownser não precisaria redimensiona-la? Por exemplo, se a janela está diminuida e carrego o site e em seguida aumento a janela a imagem não vai acompanhar o redimensionamento deixando um espaço em branco, não é mesmo?

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se expliquei bem. Quero fazer igual a esse site http://lassepedersen.biz/, onde o background faz resize e os objetos permanecem do mesmo tamanho.

Só que no meu swf, por eu ter feito uma classe só para o background, tudo estava diminuindo - o background e os objetos. Aqui tá o meu swf http://www.skintec.com.br/clear/swf/

 

Preciso fazer ele todo em flash, e também dando resize no background senão se a janela estiver pequena e carregar o site o background não acompanhará o aumento da janela.

 

Consegui fazer diminuir os objetos, mas tive que fazer as fotos de background na classe principal, e não em classe separada. Quero entender como fazer em classe separada, por isso a minha dúvida.

 

Essa aqui é a classe do background:

 

        public class FotosBackgroundSemMover extends Sprite
	{
		private var aFotos:Array;
		private var loadFoto:Loader;
		private var tamW:Number;
		private var tamH:Number;
		private var tamFotoW:Number;
		private var tamFotoH:Number;
		public var fotoNaTela;
				
		public function FotosBackgroundSemMover()
		{			
			addEventListener(Event.ADDED_TO_STAGE, iniciar);			
		}
		
		public function iniciar(evt:Event):void
		{

			stage.scaleMode = StageScaleMode.NO_BORDER;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = "TL";
			stage.addEventListener(Event.RESIZE, onResize);
			
			tamW = stage.stageWidth;
			tamH = stage.stageHeight;
			loadFoto = new Loader();
			//trace(getChildAt(0))
			//trace(menuPrincipal.x)
			
			aFotos = ["img1.jpg", "img2.jpg", "img3.jpg", "img4.jpg"];
			var m:int = Math.random()*aFotos.length;			
			loadFoto.load(new URLRequest("../img/fundo/"+aFotos[0]));
			loadFoto.contentLoaderInfo.addEventListener(Event.COMPLETE, fotoCarregada);			
		}
		
		public function fotoCarregada(evt:Event):void
		{			
			loadFoto.width = stage.stageWidth;
			loadFoto.height = stage.stageHeight;		
			
			addChild(loadFoto);
			fotoNaTela = true;
			naTela = true;			}
		
		public function set naTela(tela):void
		{			
			fotoNaTela = tela;			
		}
		
		public function get naTela():Boolean
		{
			return fotoNaTela
		}
		
		public function onResize(evt:Event=null):void
		{			
			stage.scaleMode = StageScaleMode.NO_BORDER;
			var sw:Number = stage.stageWidth;
			var sh:Number = stage.stageHeight;
			loadFoto.width = sw;
			loadFoto.height = sh;
		}
	}

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeira mente, quando fizer uma classe, e resolver pasar a mesma para tirar uma dúvida procure passar o pacote e não só a classe.

 

Agora quanto a sua dúvidaeu removi os comando sque gerenciam o stage e os coloquei na classe Main, ou você pode colocar direto no stge mesmo, depende como você está fazendo.

 

Ficari assim:

 

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

Preparado o stage, seguimos para a classe:

 

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.Loader;
	import flash.net.URLRequest;
	public class FotosBackgroundSemMover extends Sprite
	{
		private var aFotos:Array;
		private var loadFoto:Loader;
		private var tamW:Number;
		private var tamH:Number;
		private var tamFotoW:Number;
		private var tamFotoH:Number;
		public var fotoNaTela;

		public function FotosBackgroundSemMover ()
		{
			addEventListener (Event.ADDED_TO_STAGE, iniciar);
		}

		public function iniciar (evt:Event):void
		{

			stage.addEventListener (Event.RESIZE, onresize);

			tamW = stage.stageWidth;
			tamH = stage.stageHeight;
			loadFoto = new Loader();
			aFotos = ["img1.jpg","img2.jpg","img3.jpg","img4.jpg"];
			var m:int = Math.random() * aFotos.length;
			loadFoto.load (new URLRequest("../img/fundo/"+aFotos[m]));
			loadFoto.contentLoaderInfo.addEventListener (Event.COMPLETE, fotoCarregada);
		}

		public function fotoCarregada (evt:Event):void
		{
			loadFoto.width = stage.stageWidth;
			loadFoto.height = stage.stageHeight;

			addChild (loadFoto);
			fotoNaTela = true;
			naTela = true;
		}

		public function set naTela (tela):void
		{
			fotoNaTela = tela;
		}

		public function get naTela ():Boolean
		{
			return fotoNaTela;
		}

		public function onresize (evt:Event=null):void
		{
			var sw:Number = stage.stageWidth;
			var sh:Number = stage.stageHeight;
			loadFoto.width = sw;
			loadFoto.height = sh;
		}
	}
}

Não me apeguei em detalhes como sua classe deveria funcionar, apenas removi os elementos que certamente podiam estar atrapalhando.

 

Feito isso, criei um objeto com a sua classe, adicionei ao palco, e funcionou como esperado.

 

Claro que se você quiser manter a manipulação do stage pela classe, basta remover o

stage.scaleMode = StageScaleMode.NO_BORDER; deste método:

 

public function onresize(evt:Event=null):void
 { 
 stage.scaleMode = StageScaleMode.NO_BORDER;
 var sw:Number = stage.stageWidth;
 var sh:Number = stage.stageHeight;
 loadFoto.width = sw;
 loadFoto.height = sh;
 }

Att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo assim não estava funcionando. Mas ai comecei mexer e funcionou, mas não sei o que fiz. (stage.align e scaleMode ainda estão em FotosBackgroundSemMover).

 

Valeu, Foxn. Obrigado!!

 

Abraços,

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.