2014-12-02 36 views
1

这是一个内存匹配游戏,我需要一个“重新启动”按钮。游戏中的所有功能都可以正常运行,甚至是重启按钮。我的问题在于,在用户找到一个匹配(并且卡的数组发生了变化)之后,用于重新启动游戏的命令只会将卡移除,直到它“已击中”一个已经消失的卡,并停止移除它们... 。修改数组后,同时从阵列中删除同一个影片剪辑的多个副本

这是我写的按钮

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,卡,称为功能“amarelo”)

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

没有人? =((仍然卡在这 – Surtarso 2014-12-05 15:53:19

+0

我把一个答案,看看。 – akmozo 2014-12-06 22:56:34

+0

继承人在newgrounds游戏 http://www.newgrounds.com/dump/item/f606a48d7dac4234b8cecc16489b9c25 重置按钮是在右下角(旋转回收的东西),你可以使用它B4你找到一个3匹配,你会看到错误.... – Surtarso 2014-12-14 19:48:26

回答

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; 

    ... 

} 
+0

我一直在努力弄清楚trhu你的代码一个星期了......还没有解决它!几乎完成我的拳头游戏所需的最后一个编码!问题是,有没有按钮来删除单张卡片,他们被删除后,3被击中,只有当他们3是相同的... Im编辑问题w /更多的代码.... – Surtarso 2014-12-14 19:24:29

+0

@Surtar所以我们会很容易,你可以把删除3张牌的代码? – akmozo 2014-12-14 19:27:22

+0

@Surtarso我看到你的编辑,但我有一个问题:在我的代码中(''''''''''''cartasColetadas'与'cards'有相同的数组吗? – akmozo 2014-12-14 19:41:30

相关问题