Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Rjota

[Ajuda] Arkanoid Bug

Recommended Posts

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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....

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.