Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Rjota

[Ajuda] Arkanoid Bug

Mensagens Recomendadas

Rjota

Boas desculpem estar a criar mais um tópico mas como o outro quase ninguém respondeu e também já resolvi novos bugs no meu jogo, venho vos pedir uma ajuda para resolver um bug que eu e o meu colega não estamos a conseguir.

O bug é o seguinte, a bola quando vai destruir os blocos e passa mesmo no meio dos dois como a seguinte imagem, a bola simplesmente não faz nada e passa sempre, assim para a zona horizontal também.

imagetbr.jpg

O código das colisões da bola com os blocos é o seguinte:

For a As Integer = 0 To 9
           For b As Integer = 0 To 9


               'bola bater baixo bloco
               If obj.Top = tijolos(a, b).Bottom And obj.Left >= tijolos(a, b).Left And obj.Right <= tijolos(a, b).Right Then
                   If tijolos(a, b).Enabled = True Then
                       tijolos(a, b).Visible = False
                       y = -y
                       tijolos(a, b).Enabled = False

                   End If
               End If
               'bola bater baixo cima bloco
               If obj.Bottom = tijolos(a, b).Top And obj.Left >= tijolos(a, b).Left And obj.Right <= tijolos(a, b).Right Then
                   If tijolos(a, b).Enabled = True Then
                       tijolos(a, b).Visible = False
                       y = -y
                       tijolos(a, b).Enabled = False
                   End If
               End If
               'bola bater direita bloco
               If obj.Left = tijolos(a, b).Right And obj.Top >= tijolos(a, b).Top And obj.Bottom <= tijolos(a, b).Bottom Then
                   If tijolos(a, b).Enabled = True Then
                       tijolos(a, b).Visible = False
                       x = -x
                       tijolos(a, b).Enabled = False
                   End If
               End If
               'bola bater esquerda bloco
               If obj.Right = tijolos(a, b).Left And obj.Top >= tijolos(a, b).Top And obj.Bottom <= tijolos(a, b).Bottom Then
                   If tijolos(a, b).Enabled = True Then
                       tijolos(a, b).Visible = False
                       x = -x
                       tijolos(a, b).Enabled = False
                   End If
               End If
           Next
       Next 

Já agora deixo aqui o jogo no mediafire para caso vocês queiram visualizar o jogo a funcionar e verem o bug que ele tem, vasta só sacarem e executa-lo.

Download: http://www.mediafire.com/?radinm0jnjn

Abraços e espero que colaborem desta vez connosco :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vbtipo

Pelo que vi na imagem e a tua descrição do referido problema, dá-me atender que o erro é quando a bola atinge a união dos dois blocos. Para resolveres isto tens que indicares quando ele bate entre a união dos dois blocos, a bola regressa e faz desparecer esses mesmos blocos.


Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ricafilipe

Sou amigo do RJOTA, estamos os dois a fazer este projecto.

Mas por exemplo, no código acima, a bola tem o tamanho da ponta esquerda ao da direita, ou seja, cerca de 15 se não me engano.

E os blocos, têm um espaço de 1, ou então não tem nenhum, estão colados.

E a bola quando dá o bug, passa claramente em cima dos dois, logo o código devia destruir os dois porque o 15 é superior ao 1.

Mas, acho que entra em conflito pois como bate nos 2 ao mesmo tempo anula-se.

Ou então é mesmo do bud de ser o espaço em branco ali, que é 1. mas acho que isso não pode acontecer porque a bola tem 15.

Não sei se me fiz entender.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rjota

Boas

Implementamos um código novo, mas agora não conseguimos dizer a bola quando tem que fazer ricochete com os blocos na parte de baixo cima , esquerda e direita... alguma ideia ?

nota: com este código deixa de ter bug da bola passar pelo meio dos blocos....

 For a As Integer = 0 To 9
           For b As Integer = 0 To 9
               If Not (obj.Left >= tijolos(a, b).Right Or obj.Right <= tijolos(a, b).Left Or obj.Top >= tijolos(a, b).Bottom Or obj.Bottom <= tijolos(a, b).Top) Then
                   If tijolos(a, b).Enabled = True Then
                       tijolos(a, b).Visible = False
                       tijolos(a, b).Enabled = False


                   End If
               End If
           Next
       Next

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rjota

bem o nosso problema é mesmo o ricochete... so conseguimos fazer com que a bola fassa bem o ricochete no X, pois é o primeiro a vir no codigo.

For a = 0 To 9
           For b = 0 To 9
               If Not (obj.Left >= tijolos(a, b).Right Or obj.Right <= tijolos(a, b).Left Or obj.Top >= tijolos(a, b).Bottom Or obj.Bottom <= tijolos(a, b).Top) Then
                   If tijolos(a, b).Enabled = True Then
                       tijolos(a, b).Visible = False
                       tijolos(a, b).Enabled = False

                       If obj.Left <= tijolos(a, b).Right Or obj.Right >= tijolos(a, b).Left Then
                           x = -x

                       ElseIf obj.Top <= tijolos(a, b).Bottom Or obj.Bottom >= tijolos(a, b).Top Then
                           y = -y

                       End If

                   End If
               End If
           Next
       Next

queria por tambem para o Y mas ta dificel....

a cena dos rectangles intersects n consegui fazer nada....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.