Jump to content

[noob] Animação de layers (é fácil para vocês que são PRO's, help plz!)


max59x
 Share

Recommended Posts

Boas!

Precisava de uma ajudinha a prorgramar um jogo tipo "shooter" (daqueles antigos) em que tinha uns patos a moverem-se de um lad opara o outro (layers) e se carregasse (acertasse) nos patos enquanto eles se moviam, somava 1 ponto ao score.

Problema 1:

O problema é eu não saber fazer isso de animar a layer e durante a animação ser possível clicar nela.

Já pesquisei bastante sobre isto mas não consigo simplesmente, parace-me muito fácil de fazer mas sem isto não dá...

Problema 2

Como faço para alternar entre Form's? Do tipo, primeiro aparece um loggin e depois aparece o jogo. (isto em forms diferentes) qual é o comando?

Obrigado! 😄

Link to comment
Share on other sites

Para o 1º problema, basta meteres um ciclo do tipo

Dim Finished as Boolean = False

While Not Finished
...
End While

e dentro do ciclo vais mudando as posições das imageboxes (por exemplo, não sei como tás a meter os patos na form) utilizando:

Imagebox1.Location = New Point(x,y)

depois quando alguém clicar num pato vai lançar o evento 'OnClick' da picturebox.

Para o 2º problema podes meter uma coisa deste tipo no fim da tua form de login

Dim frmJogo as New Form2 'Form2 é o nome da tua form de jogo
frmJogo.Show()
Me.Close()
Revolt Website Antigo Nick: Pauzinhos
Link to comment
Share on other sites

Obrigado Revolt pela ajuda, já me deu um grande avanço.

Neste momento tenho:

1 picturebox

 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim x, y, i As Integer
        Dim Finished As Boolean = False

        For x = 1 To 100
            Waittime()
            PictureBox1.Location = New Point(x, y)
            If x = 100 Then
                Finished = True
                PictureBox1.Location = New Point(1, y)
            End If
        Next

    End Sub

'Isto só faz atrasar o movimento do pato, para ele não ir muito rápido:
    Public Sub Waittime()
        Dim Start, Finish, TotalTime As Double

        Start = Microsoft.VisualBasic.DateAndTime.Timer
        Finish = Start + 0.01                 ' Set end time for 0.1-second duration.
        Do While Microsoft.VisualBasic.DateAndTime.Timer < Finish
            ' Do other processing while waiting for 0.1 seconds to elapse.
        Loop
        TotalTime = Microsoft.VisualBasic.DateAndTime.Timer - Start
    End Sub

'Ao carregar no pato deveria fazer isto durante o movimento:
    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
     
        MessageBox.Show("Funciona")
       
    End Sub
End Class

Já consegui criar o movimento que pretendia (+- porque inda não consegui por a andar para a frente e para a trás sem parar a não ser quando é atingido) mas se clicar no pato enquanto ele vai no seu percurso não acontece nadinha, e devia aparecer a messagebox a dizer "Funciona" não é?

Também não percebi bem o While para onde ia :S

Muito obrigado pela tua colaboração  😄

EDIT1: Update no código

EDIT2: mover_labels.rar está sempre a crashar 😄 can't get it!

Link to comment
Share on other sites

Tomei a liberdade de modificar o código que meteste aqui para introduzir novos conceitos

http://revolt.hyperhub.info/files.php?action=get&file=14

O código tem comments a explicar cada uma das partes mas, sumariamente, o problema era que estava tudo a ser tratado na mesma thread.

Imagina uma thread como um processador virtual. Cada programa tem, pelo menos, uma thread que é a thread da interface. Da maneira que tinhas programado, o ciclo ocupava grande parte do poder de processamento da thread da interface e esta não se conseguia ocupar dos eventos dos butões/pictureboxes, etc e parecia que deixava de responder.

O que fiz foi utilizar um controlo denominado BackgroundWorker que facilita a criação e controlo de threads. Cada um destes controlos vai correr aquilo que definires em BackgroundWorker_DoWork numa thread separada.

No entanto, não consegues aceder directamente às variáveis ou modificar as propriedades dos controlos da thread principal e, por isso, tens de arranjar uma forma de chamar a thread principal para actualizar a form com a informação "pensada" pela thread secundária. É para isso que serve o BackgroundWorker1.ReportProgress e o evento BackgroundWorker1_ProgressChanged. Este último evento vai ser tratado pela thread principal e aí já podes modificar tudo o que quiseres da interface.

Espero que não tenha sido muito confuso ao explicar 😛

Revolt Website Antigo Nick: Pauzinhos
Link to comment
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
 Share

×
×
  • Create New...

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.