Jump to content


Photo

Problemas Com O Twenn


  • Faça o login para participar
1 reply to this topic

#1 THCB

THCB

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 11/07/2008, 15:59

Olá, estou criando uma página de galeria de fotos. Ela contará com as fotos, um botão de avançar e outro de voltar para que as fotos sejam exibidas.

Publiquei os testes, vejam para entender melhor:

http://www.propagare.net/tip8 entrem na pagina Portfolio

Meu problema: quando clico na seta de avançar, as fotos são exibidas mas não ficam exatamente na mesma posição que estavam no começo, o que deixa meu layout feio.

Meus códigos:
import caurina.transitions.Tweener;

//Primeiro Movie-Clip de Fotos

// largura da máscara, ou seja, área de visualização:
var areaVisual:Number = mask_mc._width;

// Vamos guardar a posição inicial do nosso clip para uso futuro:
var posicaoInicial:Number = tudo_mc._x;

var numDeslocamento:Number = tudo_mc._width / areaVisual;

if (numDeslocamento.toString().indexOf(".") > -1) numDeslocamento++;

var listaDePosicoes:Array = new Array();

for (var i:Number = 0; i < numDeslocamento; i++) {
	
	listaDePosicoes.push(Math.round(posicaoInicial - (areaVisual * i)));
		
		
}

var indiceFluxo:Number = 0;

avancar_mc.onRelease = function():Void {
	if (indiceFluxo >= (numDeslocamento -4)) {
		// Se estava na penúltima vez e foi para o último deslocamento, desabilitar este botão.
		this.enabled	 = false;
		var cor:Color = new Color (avancar_mc);
		cor.setRGB(0xF4EEDD);
		
		
	}
	// habilito o botão voltar..
	voltar_mc.enabled	 = true;
	var cor:Color = new Color (voltar_mc);
	cor.setRGB(0xFF8200);
	indiceFluxo++;
	doTween();	
}
voltar_mc.onRelease = function():Void {
	if (indiceFluxo <= 1) {
		// Se estava na penúltima vez e foi para o deslocamento 0, desabilitar este botão.
		this.enabled = false;
		var cor:Color = new Color (voltar_mc);
		cor.setRGB(0xF4EEDD);
	}
	// habilito o botão avançar..
	avancar_mc.enabled	 = true;
	var cor:Color = new Color (avancar_mc);
	cor.setRGB(0xff8200);
	indiceFluxo--;
	
	doTween();	
}

voltar_mc.enabled	 = false;
var cor:Color = new Color (voltar_mc);
cor.setRGB(0xF4EEDD);

function doTween():Void {
	// finalmente a nossa função que vai movimentar o clip:
	var tempo:Number	 = 1;
	var modo:String	 = "easeInBounce"; // tente também "easeInQuad", "easeOutBounce", "easeInBounce" e outros modos de transição da classe Tweener. Have fun!;->
	var xAlvo:Number	 = listaDePosicoes[indiceFluxo];
	Tweener.addTween(tudo_mc, {_x:xAlvo, time:tempo, transitions:modo});
}

Este é o código da timeline principal.

E este, abaixo, é o do movie-clip que busca as fotos do xml:
System.useCodepage = true;
//include "lmc_tween.as"
// criando o objeto XML
var meuXML:XML = new XML();
// ignorando os espaços em branco
meuXML.ignoreWhite = true;
// quando o XML carregar
meuXML.onLoad = function():Void  {
	// variável que retorna a altura de todos os thumbs juntos
	_global.altura = (thumb._height*meuXML.childNodes[0].childNodes.length+meuXML.childNodes[0].childNodes.length*2);
	// criando um loop for
	for (i=0; i<meuXML.childNodes[0].childNodes.length; i++) {
		// duplicando o movieclip thumb
		duplicateMovieClip("thumb", "thumb"+i, i+1);
		thumbs = _root.tudo_mc["thumb"+i];
		// posição de cada thumb
		thumbs._x += (thumb._height+3)*i;
		// criando uma instância da classe MovieClipLoader
		var MCL1:MovieClipLoader = new MovieClipLoader();
		// carregando um arquivo no objeto MCL1, de acordo com o primeiro nó do XML, o nó filho atual (i) do atributo thumb, movieclip alvo: thumbs.mostra
		MCL1.loadClip(meuXML.childNodes[0].childNodes[i].attributes.thumb, thumbs.aumentar.mostra);
		thumbs.onEnterFrame = function():Void  {
			// variável que checa o progresso do objeto MCL1
			progresso1 = MCL1.getProgress(this.aumentar.mostra);
			// texto do campo pct_thumb: bytes carregados / bytes totais * 100 + o sinal de porcentagem
			this.pct_thumb.text = Math.ceil(progresso1.bytesLoaded/progresso1.bytesTotal*100)+"%";
			// se os bytes carregados forem iguais ao bytes totais, deixa o campo de texto invisível, se não, ele continua visível
			progresso1.bytesLoaded == progresso1.bytesTotal ? this.pct_thumb._visible=false : this.pct_thumb._visible=true;
		};
		// variável de referência, que indica o nó atual
		thumbs.atual = i;
		thumbs.campo.text = i+1;
		thumbs.imagemGrande = this.childNodes[0].childNodes[i].attributes.imagemGrande;
		thumbs.titulo = this.childNodes[0].childNodes[i].attributes.titulo;
		thumbs.descricao = this.childNodes[0].childNodes[i].attributes.descricao;
		// retirando a mãozinha do mouse
		thumbs.btn.useHandCursor = true;
		// quando clicar no movieclip
		thumbs.btn.onRelease = function():Void  {
			// abre link
			//getURL(""+meuXML.childNodes[0].childNodes[this._parent.atual].attributes.imagemGrande, "_blank");
			// mesma lógica do MCL1
			this.onEnterFrame = function():Void  {
				progresso2 = MCL2.getProgress(_root.mc);
				_root.pct.text = Math.round(progresso2.bytesLoaded/progresso2.bytesTotal*100)+"%";
				progresso2.bytesLoaded == progresso2.bytesTotal ? _root.pct._visible=false : _root.pct._visible=true;
			};
			// definindo o texto do campo de texto descrição, de acordo com o nó atual do atributo desc
		};
		// quando passar o mouse
		thumbs.btn.onRollOver = function():Void  {
			// pequena mudança de contraste
			_root.tudo_mc["thumb"+this._parent.atual].aumentar.gotoAndPlay(2);
			_root.tudo_mc["thumb"+this._parent.atual].swapDepths(getNextHighestDepth());
			
		};
		// quando tirar o mouse
		thumbs.btn.onRollOut = function():Void  {
			// voltando ao normal
			_root.tudo_mc["thumb"+this._parent.atual].aumentar.gotoAndPlay(6);
		};
		thumbs.btn.onPress = function():Void  {
			// Quando Clicar na imagem
			_global.descricao = _root.tudo_mc["thumb"+this._parent.atual].descricao;
			_global.TituloFoto = _root.tudo_mc["thumb"+this._parent.atual].titulo;
			_global.imagemGrande = _root.tudo_mc["thumb"+this._parent.atual].imagemGrande;
			_root.popup.gotoAndPlay(2);
		};
	}
};
// carregando o arquivo XML 
meuXML.load("galeria01.xml");
System.useCodepage = true;

Se alguém puder me ajudar ficaria mto grata mesmo

Abraços

#2 Pedropauloalmeida

Pedropauloalmeida

    Fale ao motorista somente o indispensável

  • Usuários
  • 1376 posts
  • Sexo:Masculino
  • Localidade:Santo André SP

Posted 15/07/2008, 22:26

Hehehee.

Boa parte desse código eu conheço bem. É meu kkkkk.
Mas está misturado com muita sujeira.

Agora, se entendi bem, o problema está na hora de você calcular o número de vezes do looping.

Quiando eu escrevi:
// Vamos guardar a posição inicial do nosso clip para uso futuro:
var posicaoInicial:Number = tudo_mc._x;

var numDeslocamento:Number = tudo_mc._width / areaVisual;

if (numDeslocamento.toString().indexOf(".") > -1) {
	 numDeslocamento++;
	 // Aqui você tem que deixar o número redondo. Depois que você iterou, deve arrendondar:
	 numDeslocamento = Math.abs(numDeslocamento);
}

Deve funcionar. Teste aí. Não mexi no resto do código. Mas acho que o erro está aí.

Abraços.

pp

PS: mas pelo que me lembro, o exemplo que eu tinha feito aqui no fórum com esse código era pra outra pessoa... Enfim. Bom proveito.

Edição feita por: Pedropauloalmeida, 15/07/2008, 22:27.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq