Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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);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;
}
}
}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?
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