这是一款记忆匹配游戏,我需要重启"按钮。一切都在游戏中完成,甚至是重启按钮。我的问题在于,在用户找到匹配项(并且卡阵列发生变化)之后,用于重新启动游戏的命令只会删除卡片,直到它出现" hits"一个已经消失,并停止删除....
这是我为按钮
编写的代码btnRestart.addEventListener(MouseEvent.CLICK, comecaOtraveh);
function comecaOtraveh(e:MouseEvent):void
{
for each(var mc:MovieClip in virarCartas)
{
if (mc != null)
{
mc.parent.removeEventListener(MouseEvent.CLICK, cartaClicada);
mc.parent.removeChild(mc); // Cannot access a property or method of a null object reference.
//this.removeChild(mc); // The supplied DisplayObject must be a child of the caller.
//removeChild(mc); // The supplied DisplayObject must be a child of the caller.
}
}
clearInterval(intervalo);
myTimer.stop();
myTimer.removeEventListener(TimerEvent.TIMER, iniciaTempo);
channel.stop();
channel.removeEventListener(Event.SOUND_COMPLETE, onComplete);
removeChild(mcContagem);
gotoAndStop(1)
}
我尝试了所有的选项,并且在没有IF声明的情况下尝试过......还没有工作......
下面是将我的卡片放入桌面,将它们随机播放,向用户显示而不是转动它们以便游戏开始的代码。
for (var i: int = 0; i < QUANT_CARTAS; i++)
{
cartas.push(i);
}
for (var moeda: int = QUANT_CARTAS - 1; moeda > 0; moeda--)
{
var pos: int = Math.floor(Math.random() * moeda);
var carta: int = cartas[moeda];
cartas[moeda] = cartas[pos];
cartas[pos] = carta;
}
for (i = 0; i < QUANT_CARTAS; i++)
{
var novaCarta: Carta = new Carta();
novaCarta.tipoCarta = cartas[i];
novaCarta.x = 5 + (novaCarta.width + 2.7) * (i % CARTAS_POR_LINHA);
novaCarta.y = 5 + (novaCarta.height + 2.7) * (Math.floor(i / CARTAS_POR_LINHA));
novaCarta.gotoAndStop(cartas[i] + 1); // face pra cima
novaCarta.buttonMode = true;
novaCarta.addEventListener(MouseEvent.CLICK, cartaClicada);
addChild(novaCarta);
virarCartas.push(novaCarta);
if (i == 35)
{
podeJogar = false;
mcContagem.x = 884;
mcContagem.y = 511;
addChild(mcContagem);
intervalo = setInterval(desviraCartas, 3000);
function desviraCartas()
{
for (var j: int = 0; j < QUANT_CARTAS; j++)
{
virarCartas[j].gotoAndStop(QUANT_CARTAS + 1);
if (j == 35)
{
clearInterval(intervalo);
iniciaJogo();
playSound();
}
}
}
}
}
这是我用于鼠标点击的代码
function cartaClicada(e: MouseEvent)
{
if (podeJogar == true)
{
SOM_memoClick.play();
var carta: Carta = e.currentTarget as Carta;
if (cartasColetadas.indexOf(carta) == -1)
{
cartasColetadas.push(carta);
carta.gotoAndStop(carta.tipoCarta + 1);
}
if (cartasColetadas.length == 3) //APOS 3 CARTAS CLICADAS
{
podeJogar = false;
var carta3: int = cartasColetadas[2].tipoCarta
var carta2: int = cartasColetadas[1].tipoCarta
var carta1: int = cartasColetadas[0].tipoCarta
//0,1,2
if (((carta1 == 0) || (carta1 == 1) || (carta1 == 2)) &&
((carta2 == 0) || (carta2 == 1) || (carta2 == 2)) &&
((carta3 == 0) || (carta3 == 1) || (carta3 == 2)))
{
SOM_trioInicio.play();
intervalo = setInterval(amarelo, intervaloFim);
}
//3,4,5
else if (((carta1 == 3) || (carta1 == 4) || (carta1 == 5)) &&
((carta2 == 3) || (carta2 == 4) || (carta2 == 5)) &&
((carta3 == 3) || (carta3 == 4) || (carta3 == 5)))
{
SOM_trioInicio.play();
intervalo = setInterval(rosa, intervaloFim);
}
//6,7,8
else if (((carta1 == 6) || (carta1 == 7) || (carta1 == 8)) &&
((carta2 == 6) || (carta2 == 7) || (carta2 == 8)) &&
((carta3 == 6) || (carta3 == 7) || (carta3 == 8)))
{
SOM_trioInicio.play();
intervalo = setInterval(celeste, intervaloFim);
}
//9,10,11
else if (((carta1 == 9) || (carta1 == 10) || (carta1 == 11)) &&
((carta2 == 9) || (carta2 == 10) || (carta2 == 11)) &&
((carta3 == 9) || (carta3 == 10) || (carta3 == 11)))
{
SOM_trioInicio.play();
intervalo = setInterval(branco, intervaloFim);
}
//12,13,14
else if (((carta1 == 12) || (carta1 == 13) || (carta1 == 14)) &&
((carta2 == 12) || (carta2 == 13) || (carta2 == 14)) &&
((carta3 == 12) || (carta3 == 13) || (carta3 == 14)))
{
SOM_trioInicio.play();
intervalo = setInterval(prata, intervaloFim);
}
//15,16,17
else if (((carta1 == 15) || (carta1 == 16) || (carta1 == 17)) &&
((carta2 == 15) || (carta2 == 16) || (carta2 == 17)) &&
((carta3 == 15) || (carta3 == 16) || (carta3 == 17)))
{
SOM_trioInicio.play();
intervalo = setInterval(verde, intervaloFim);
}
//18,19,20
else if (((carta1 == 18) || (carta1 == 19) || (carta1 == 20)) &&
((carta2 == 18) || (carta2 == 19) || (carta2 == 20)) &&
((carta3 == 18) || (carta3 == 19) || (carta3 == 20)))
{
SOM_trioInicio.play();
intervalo = setInterval(preto, intervaloFim);
}
//21,22,23
else if (((carta1 == 21) || (carta1 == 22) || (carta1 == 23)) &&
((carta2 == 21) || (carta2 == 22) || (carta2 == 23)) &&
((carta3 == 21) || (carta3 == 22) || (carta3 == 23)))
{
SOM_trioInicio.play();
intervalo = setInterval(violeta, intervaloFim);
}
//24,25,26
else if (((carta1 == 24) || (carta1 == 25) || (carta1 == 26)) &&
((carta2 == 24) || (carta2 == 25) || (carta2 == 26)) &&
((carta3 == 24) || (carta3 == 25) || (carta3 == 26)))
{
SOM_trioInicio.play();
intervalo = setInterval(azul, intervaloFim);
}
//27,28,29
else if (((carta1 == 27) || (carta1 == 28) || (carta1 == 29)) &&
((carta2 == 27) || (carta2 == 28) || (carta2 == 29)) &&
((carta3 == 27) || (carta3 == 28) || (carta3 == 29)))
{
SOM_trioInicio.play();
intervalo = setInterval(dourado, intervaloFim);
}
//30,31,32
else if (((carta1 == 30) || (carta1 == 31) || (carta1 == 32)) &&
((carta2 == 30) || (carta2 == 31) || (carta2 == 32)) &&
((carta3 == 30) || (carta3 == 31) || (carta3 == 32)))
{
SOM_trioInicio.play();
intervalo = setInterval(marrom, intervaloFim);
}
//33,34,35
else if (((carta1 == 33) || (carta1 == 34) || (carta1 == 35)) &&
((carta2 == 33) || (carta2 == 34) || (carta2 == 35)) &&
((carta3 == 33) || (carta3 == 34) || (carta3 == 35)))
{
SOM_trioInicio.play();
intervalo = setInterval(vermelho, intervaloFim);
}
else
{
intervalo = setInterval(resetaCartas, 1150);
}
}
}
}
现在,在比赛期间,这就是我如何删除它们(假设我找到了0,1,2,卡片,称为功能&#34; amarelo&#34;)
function amarelo(): void
{
clearInterval(intervalo);
addChild(mcExplic);
mcExplic.gotoAndStop(1);
mcExplic.y = 384;
mcExplic.x = 512;
addChild(mcBotaoOk);
mcBotaoOk.y = 370;
mcBotaoOk.x = 512;
mcBotaoOk.visible = false;
cartasColetadas[0].removeEventListener(MouseEvent.CLICK, cartaClicada);
cartasColetadas[1].removeEventListener(MouseEvent.CLICK, cartaClicada);
cartasColetadas[2].removeEventListener(MouseEvent.CLICK, cartaClicada);
removeChild(cartasColetadas[0]);
removeChild(cartasColetadas[1]);
removeChild(cartasColetadas[2]);
cartasColetadas = new Array();
podeJogarTrio = true;
cursorTrio = true;
veramarelo();
mouseTipo();
}
所以...有关如何使重置按钮工作的任何想法??? (第1块代码发布)
我的变量等...
const QUANT_CARTAS: int = 36;
const CARTAS_POR_LINHA: int = 6;
var alturaTrio: int = -180;
var larguraTrio: int = -300;
var intervaloTrio: int = 500;
var intervaloFim: int = 800;
var intervalo: int;
var gameScore: int;
var pontoErro: int;
var pontoAcerto: int;
var erros: int = 0;
var acertos: int = 0;
var musicaOn: Boolean = true;
var podeJogar: Boolean = true;
var podeJogarTrio: Boolean = false;
var cursorTrio: Boolean = false;
var mcExplic: Explic = new Explic();
var mcContagem: Contagem = new Contagem;
var mcBotaoOk: BotaoOk = new BotaoOk;
var mcTrans: Transicao = new Transicao();
var virarCartas: Array = new Array();
var trio: Array = new Array();
var cartas: Array = new Array();
var cartasColetadas: Array = new Array();
答案 0 :(得分:0)
您得到的错误是因为该对象已从舞台中删除而不是从virarCartas
数组中删除,请查看此示例:
var cards:Array = new Array()
// we create our cards and add it to cards array
for(var i=0; i < 6; i++){
var card:Card = new Card()
card.x = 50*i
// we set and index to our card to identify it when we need to remove it from the cards array
card.index = i
card.addEventListener(MouseEvent.CLICK, card_on_Press)
addChild(card)
cards.push(card)
}
function card_on_Press(e:MouseEvent){
var this_card = MovieClip(e.currentTarget)
this_card.removeEventListener(MouseEvent.CLICK, card_on_Press)
this_card.parent.removeChild(this_card)
// remove our card = set it as null
cards[this_card.index] = null
}
var btn_remove_all:Btn = new Btn()
btn_remove_all.x = 10
btn_remove_all.y = 80
btn_remove_all.addEventListener(
MouseEvent.CLICK,
function(e:MouseEvent){
for each(var card:MovieClip in cards) {
if (card != null){
card.removeEventListener(MouseEvent.CLICK, card_on_Press)
card.parent.removeChild(card)
card = null
}
}
cards = null
}
)
addChild(btn_remove_all)
希望能帮到你。
修改:
为简化起见,您可以为卡片添加索引(就像我在答案中所做的那样),然后当您想要删除它时,您只需执行virarCartas[card.index] = null
:
var novaCarta: Carta = new Carta();
// we add an index, it's the virarCartas array length, of course you should add it to your Carta class
novaCarta.index = virarCartas.length;
novaCarta.tipoCarta = cartas[i];
novaCarta.x = 5 + (novaCarta.width + 2.7) * (i % CARTAS_POR_LINHA);
novaCarta.y = 5 + (novaCarta.height + 2.7) * (Math.floor(i / CARTAS_POR_LINHA));
novaCarta.gotoAndStop(cartas[i] + 1); // face pra cima
novaCarta.buttonMode = true;
novaCarta.addEventListener(MouseEvent.CLICK, cartaClicada);
addChild(novaCarta);
virarCartas.push(novaCarta);
然后像这样编辑amarelo
函数:
function amarelo(): void
{
...
removeChild(cartasColetadas[0]);
removeChild(cartasColetadas[1]);
removeChild(cartasColetadas[2]);
virarCartas[cartasColetadas[0].index] = null;
virarCartas[cartasColetadas[1].index] = null;
virarCartas[cartasColetadas[2].index] = null;
...
}