Ir para conteúdo

Arquivado

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

Thales Rodrigues

Seleção de Níveis

Recommended Posts

Eu estou fazendo um jogo que tem vários níveis, e quando você vai completando eles você desbloqueia o próximo. O jogador pode selecionar um nível (apenas os desbloqueados), então resolvi fazer um menu de seleção de níveis.

 

Mas o jogo tem 30 níveis; como eu posso fazer o menu de seleção de nível sem precisar instanciar 30 botões, mudar o texto de cada um (os botões tem um texto que indica a numeração do nível), criar 30 eventos, uma condição para cada botão apertado (if e.target == botao), e ainda por cima o botão só vai funcionar se o nível estiver desbloqueado! :( É muito trabalho, não tem um jeito mais fácil de fazer isso?

 

Aguardo por respostas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você usar orientação a objetos fica mais fácil. Assim você precisaria criar uma classe tipo Botao.as e nessa classe criar as propriedades que lhe interessam.

 

abs

 

Acontece que eu sou novo nesse assunto, e não consigo fazer muita coisa. Eu estou recebendo toda hora esse erro:

 

"1336: Número incorreto de argumentos. Esperado 0."

 

package thales
{
	import flash.display.SimpleButton;
	import flash.geom.ColorTransform;
	import flash.events.Event;
	import flash.text.TextField;
	public class BotaoNivel
	{
		public var fase:Number;
		public var bloqueado:Boolean;
		var botao:SimpleButton;
		var cor:ColorTransform;
		var texto:TextField;
		public function BotaoNivel(botao:SimpleButton, nivel:Number, bloqueio:Boolean)
		{
			fase = nivel;
			bloqueado = bloqueio;
			botao.addChild(texto);
			texto.textFont = "Nexa Bold";
			texto.textSize = 28;
			texto.textColor = 0xffcc00;
			texto.x = botao.x/2 - texto.width/2;
			texto.y = botao.y/2 - texto.height/2;
			texto.text = String(fase);
			cor.color = 0xcccccc;
			if (bloqueado)
			{
				botao.transform.colorTransform = cor;
				botao.mouseEnabled = false;
			}
		}
	}
}
var botao:BotaoNivel = new BotaoNivel(botaonivel, 1, false);

Eu não consigo entender o erro, está bem claro no meu código que a função BotaoNivel requer 3 argumentos parâmetros (O botão, o nível, e se o nível está bloqueado ou não), e não 0.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

 

Deixa ver se eu entendi. O visual do seu botão é composto por um botão e um textfield criado via código. Certo?

 

Eu faria da seguinte maneira: desenharia um fundo retangular de um tamanho não muito grande (talvez 96 x 96 px) e criaria um texto dinâmico com fonte de tamanho 30px e nome de instância txt, por exemplo, para caber dentro dos limites do fundo; selecionaria os dois objetos e converteria para movieclip dando o nome BotaoNivel e marcaria a opção export for actionscript na parte avançada dessa janela.

 

Agora você precisa aprimorar a sua classe para se ajustar ao seu botão.

 

Eu faria assim:

package thales
{
	import flash.text.TextField;
	
	public class BotaoNivel extends MovieClip;
	{
		
		public var txt:TextField;
		public var habilitado:Boolean = false;
		
		public function BotaoNivel() 
		{
			this.buttonMode = true;
			this.mouseChildren = false;
			this.mouseEnabled = false;
		}
		
		public function habilita():void 
		{
			this.mouseEnabled = true;
		}
	}
}

Dessa forma, você deve ter uma outra classe para adicionar os eventos dos botões, informar os números dos níveis e habilitá-los de acordo com o necessário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz o seguinte código:

 

package thales
{
	import flash.display.MovieClip;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.events.MouseEvent;
	import flash.display.Stage;
	public class BotaoNivel extends MovieClip
	{
		public var txt:TextField;
		private var formato:TextFormat = new TextFormat("Nexa Bold",28,0xffcc00);
		public var habilitado:Boolean = false;
		public var fase:Number;
		public var meuPalco:Stage;
		public function BotaoNivel(nivel:uint, bloqueio:Boolean, palco:Stage)
		{
			fase = nivel;
			habilitado = bloqueio; 
			meuPalco = palco;
			txt.defaultTextFormat = formato;
			this.addChild(txt);
			txt.text = String(fase);
		}
		public function adiciona():void
		{
			meuPalco.addChild(this);
			if (habilitado)
			{
				this.buttonMode = true;
				this.addEventListener(MouseEvent.ROLL_OVER, passaMouse);
				this.addEventListener(MouseEvent.ROLL_OUT, tiraMouse);
			}
			else
			{
				this.buttonMode = false;
				this.gotoAndStop(3);
			}
		}
		private function passaMouse(e:MouseEvent):void
		{
			this.gotoAndStop(2);
		}
		private function tiraMouse(e:MouseEvent):void
		{
			this.gotoAndStop(1);
		}
	}
}
import thales.BotaoNivel;

import flash.events.Event;

var botao:BotaoNivel = new BotaoNivel(1, false, stage);

botao.adiciona();

 

Mas toda hora fica dando este erro:

 

 

TypeError: Error #1009: Não é possível acessar uma propriedade ou um método de uma referência de objeto nula.

 

Além disso, por que seria necessário criar outra classe? E como eu iria passar variáveis de uma classe para outra?

 

Consegui resolver o erro instanciando a minha variável TextField, como eu deleto este post?

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.