Ir para conteúdo

Arquivado

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

Juste

Switch case em AS3 não carrega imagens

Recommended Posts

Boa tarde a todos !

 

Estou no meio do meu trabalho com o prazo apertadíssimo e me deparei com uma situação.

A função que eu criei deve trocar uma image e ocultar a atual quando eu clicar no botão "btn_next" e retroceder quando "btn_prev".

Situação atual: Só avança para uma imagem de 7 ! hahaha

Estou usando Tween para definir o estado atual das imagens como ocultas.

 

Vamos ao código:

 


image_2.visible = false;
image_2.alpha = 0;
image_3.visible = false;
image_3.alpha = 0;
image_4.visible = false;
image_4.alpha = 0;
image_5.visible = false;
image_5.alpha = 0;
image_6.visible = false;
image_6.alpha = 0;
image_7.visible = false;
image_7.alpha = 0;

var curState:String;
var curClick:int;

btn_next.addEventListener(MouseEvent.CLICK, next_slide);
btn_prev.addEventListener(MouseEvent.CLICK, next_slide);

function next_slide(e:MouseEvent):void
{
switch (e.currentTarget.name)
{
	case "btn_next" :

		curState = "image_2";
		curClick = 0;

		TweenMax.to(image_1, .5, {autoAlpha : 0});
		TweenMax.to(image_2, .5, {autoAlpha : 1});

		break;
	case "btn_next" :

		curState = "image_2";
		curClick = 1;

		TweenMax.to(image_2, .5, {autoAlpha : 0});
		TweenMax.to(image_3, .5, {autoAlpha : 1});



		break;
	case "btn_next" :

		curState = "image_3";
		curClick = 2;

		TweenMax.to(image_3, .5, {autoAlpha :0});
		TweenMax.to(image_4, .5, {autoAlpha :1});


		break;
	case "btn_next" :

		curState = "image_4";
		curClick = 3;

		TweenMax.to(image_4, .5, {autoAlpha : 0});
		TweenMax.to(image_5, .5, {autoAlpha :1});


		break;
	case "btn_next" :

		curState = "image_5";
		curClick = 4;

		TweenMax.to(image_5, .5, {autoAlpha : 0});
		TweenMax.to(image_6, .5, {autoAlpha : 1});

		break;
	case "btn_next" :

		curState = "image_6";
		curClick = 5;

		TweenMax.to(image_6, .5, {autoAlpha : 0});
		TweenMax.to(image_7, .5, {autoAlpha : 1});



		break;
	case "btn_next" :

		curState = "image_7";
		curClick = 6;

		TweenMax.to(image_7, .5, {autoAlpha : 0});



		break;
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor usar carregamento externo das imagens, se possível, via xml, ou com Array.

 

Na posição (0,0), empilhadas (não é a maneira recomendável, mas resolve, nesse caso use poucas imagens com o máximo de compressão, bem leves) e no evento de click, altere o índice.

 


case 'btn_next':
	if(numImg < ultImg){
		numImg++;
	} else {
		numImg = 0;
	}

	// etc		

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor usar carregamento externo das imagens, se possível, via xml, ou com Array.

 

Na posição (0,0), empilhadas (não é a maneira recomendável, mas resolve, nesse caso use poucas imagens com o máximo de compressão, bem leves) e no evento de click, altere o índice.

 


case 'btn_next':
	if(numImg < ultImg){
		numImg++;
	} else {
		numImg = 0;
	}

	// etc		

 

Abs

 

Eu estou tentando reaproveitar uma função que criei no JS, mas devo estar errando no método para o AS3.

Também preciso que as imagens sejam exibidas somente quando forem chamadas =\

 


var arrImages:Array = ["./images/image_1.png", "./images/image_2.png","./images/image_3.png","./images/image_4.png","./images/image_5.png",
				   "./images/image_6.png","./images/image_7.png"] ;

var ind_image = 0 ;
var ult_image = arrImages.length -1 ;
function swap_image(next)
	{	

		ind_image = ind_image + next;
		if(ind_image > ult_image)
			{
				ind_image = 0 
			};
		if(ind_image < 0) 
			{
			ind_image = ult_image
			};

			getChildByName('arrImages') = arrImages[ind_image];

			}

}


Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas você está fazendo um switch de um case só, todos os seus cases são o mesmo "btn_next", dai ele só vai funcionar o primeiro. Nesse caso é melhor você fazer um id numérico e ir mudando de acordo com o incremento ou decremento do id, dai você muda os alphas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é bem com xml, de qquer forma é melhor ele fazer um switch com 2 cases, o problema é que ele está usando o mesmo resultado do switch em todos os cases, o certo é ele usar um id, e de acordo com o nome do botão ele adicionar ou subtrair do id, e com um mod, ele coloca sempre a imagem num loop infinito, tanto pra tras quanto para frente, ex:

 

var arMovies: Array = new Array();

var i: Number = 7;
while(i){
arMovies.push("image_" + i--);
}
arMovies.reverse();

btn_next.addEventListener(MouseEvent.CLICK, next_slide);
btn_prev.addEventListener(MouseEvent.CLICK, next_slide);

var id:Number = 0;

function next_slide(e:MouseEvent):void
{
switch(e.currentTarget.name){

	case "btn_next":
			id += 1;
			trace(arMovies[id % arMovies.length]);
		break;
	case "btn_prev":
			id += arMovies.length - 1;
			trace(arMovies[id % arMovies.length]);
		break;
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ carneirinho

 

Não entrei no mérito da questão, apenas sugeri um caminho.

 

Tenho funfando com xml + timer.

 

Code enxuto, lindinho!

 

 

:P

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.