Ir para conteúdo

Arquivado

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

Maisa Borges

Jogo agricultura flash AS3

Recommended Posts

Ola pessoal, boa noite,estou tentando fazer um jogo tipo fazenda em flash, ja esta bem adiantado, mas com alguns probleminhas, neste meu projeto tenho 6 terrenos no palco, qdo planto, minhas plantas crescem por cima uma das outras, o codigo é esse:

import flash.display.MovieClip;

stop();

var sementeira:Sementeira = new Sementeira  ;
var placaAlface:PlacaAlface = new PlacaAlface  ;
var placaCenoura:PlacaCenoura = new PlacaCenoura  ;
var terrenos:Array = new Array();
var sementeSelect:Boolean = false;

for(var i = 0 ; i < this.numChildren ; i++){
	var mc = this.getChildAt(i);
	if(mc.name == 'terreno'){
		mc.status = true;
		mc.addEventListener('click', abreSementeira);
	}
}
sementeira.btn_RemoveSementeira.addEventListener(MouseEvent.CLICK, fechaSementeira);
placaAlface.btn_FechaAlface.addEventListener(MouseEvent.CLICK, fechaAlface);
placaCenoura.btn_FechaCenoura.addEventListener(MouseEvent.CLICK, fechaCenoura);

function abreSementeira(e:MouseEvent):void{
	if((e.currentTarget.name != 'terreno' || e.currentTarget.status) && !sementeSelect ){
		sementeira.x = 100;
		sementeira.y = 100;
		addChild(sementeira);
	}
}

function fechaSementeira(e:MouseEvent):void{
	removeChild(sementeira);
}

function fechaAlface(e:MouseEvent):void{
	sementeSelect = false;
	stage.removeEventListener(MouseEvent.CLICK, Plantar);
	removeChild(placaAlface);
}

function fechaCenoura(e:MouseEvent):void{
	sementeSelect = false;
	stage.removeEventListener(MouseEvent.CLICK, Plantar);
	removeChild(placaCenoura);
}
// Aqui temos uma array, contendo os MovieClips das minhas sementes.
// Logo abaixo so iniciei a variavel Tipo, que mais para baixo vai receber o valor da array.
var array:Array = new Array(alface,cenoura);
var tipo;
//coloquei esta variavel 
var terreno = null;

// Chamando o Eventos de Mouse Escolher
sementeira.addEventListener(MouseEvent.CLICK, Escolher);

/* Função Escolher contem apenas um switch para pegar o nome
 da semente que foi escolhida, no quem recebe esse valor e a variavel "tipo"
 que busca em nosso array.*/
function Escolher(e:MouseEvent):void
{
	removeChild(sementeira);

	switch ( e.target.name){
		case "alface" :
			tipo = array[0];
			placaAlface.x = 120;
			placaAlface.y = 100;
			addChild(placaAlface);
			break;

		case "cenoura" :
			tipo = array[1];
			placaCenoura.x = 120;
			placaCenoura.y = 100;
			addChild(placaCenoura);
			break;
	}
	
	sementeSelect = true;
   
	// Chamando o evento Plantar
	stage.addEventListener(MouseEvent.CLICK, Plantar);
}

// Função Plantar, vem depois de termos escolhido uma semente.
function Plantar(e:MouseEvent):void
{
	// Como jogamos o Evento de Plantar no stage, verificamos se o nome dele nao e 
	// null, isso para caso o usuario click no stage, evitar erros.
	//if(e.target.name == null)
	if (e.target.name == "terreno"){
		
		// Variavel terra criada em tempo de execução
		// so para pegar a terra clicada, para setarmos a semente no lugar certo.
		var terreno = e.target;
		
		// aqui temos outra variavel que para receber o tipo e 
		// adicionar nossa nova semente.. =D
		var semente:MovieClip = new tipo();
		
		semente.x = terreno.x;
		semente.y = terreno.y;
		
		semente.mouseChildren = false;
		semente.mouseEnabled = false;
		
		terreno.status = false;
		
		addChild(semente);
especie = e.currentTarget;
   this.setChildIndex(especie,this.numChildren);
	}
}

function colher(e:MouseEvent):void{
	// Como jogamos o Evento de Plantar no stage, verificamos se o nome dele nao e 
	// null, isso para caso o usuario click no stage, evitar erros.
	//if(e.target.name == null)
	var especie = e.target;
	
	if (e.target.name == "especie"){

	}
}

Se alguem puder me ajudar, fico muito grato, não enviei o arquivo porque não achei como enviar, mas vou deixar meu imail( o.viano@hotmail.com), caso alguem queira ver o arquivo é so entrar em contato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser questão de posicionamento. Quando você cria uma planta nova você precisa distribuir ela alterando as posições x e y.

Se tivesse como ver o seu projeto acho q ficaria mais fácil ajudar. Cria uma conta no 4shared.com. Lá você pode colocar seus arquivos e depois colocar o link aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aparentemente você está colocando todas em uma posição x = 120 e y = 100

com isso todas ficarão uma por cima das outras em uma posição única

talvez você deva utilizar um incremento por array tipo:

array[A] posição x = 120+(A*50)

onde o A é o número do array, dessa forma cada planta iria crescer em posições X de 50 em 50 de distancia a partir da posição 120

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa adicionar uma verificação se o terreno clicado já recebeu a plantação, senão permite plantar por cima.

 

Por exemplo, adicione os 6 terrenos em uma array, a cada clique você remove o elemento da array, isso impede o Listener (plantar) de executar a ação novamente, ou seja, "desativa" aquele terreno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que as plantas não cresçam umas por cima das outras você precisa impedir que o terreno seja clicado novamente. Você pode fazer isso removendo o evento de clique sobre o terreno plantado. Quando você clicar para plantar remove o evento utilizando removeEventListener.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcos Cardoso vc conseguiu abrir o link, alem de estar plantando por cima dos terrenos ja plantados, as plantas da direita ficam na frente das outras, se vc conseguir ver o arquivo vai entender melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcos eu ja tinha tentado fazer deste geito, o problema é que a sim vc consegue plantar apenas um terreno de cada vez, eu acredito que talves teria que fazer um if dizendo que se ja estiver plantado stage.addEventListener(MouseEvent.CLICK, Plantar); mas eu não consigo fazer isso, qto asua modificação, o problema de uma crescer na frente da outra, plantando uma de cada ves esta certo, o que eu precisava é clico no terreno, abre sementeira, escolho semente(alface), planto qtos terrenos desejar ex. 3 ai fecho(alface) e clico no terreno novamente para plantar outra especie.

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.