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

max59x

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

7 mensagens neste tópico

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! :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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  :D

EDIT1: Update no código

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sinceramente gostava muito de ajudar, mas não consigo...que pena não haver pessoas que saibam menos que eu..assim não posso ajudar! Achoq ue vais no bom caminho, depois quando acabres diz para eu dar uma vista de olhos, somos todos pricipiantes não é verdade! ;D

Abraços

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Grande obrigado para ti Revolt pela ajuda dada! Apesar de haver uma ou outra linha que não consegui perceber agora já vou conseguir fazer o que queria.

Mais uma vez obrigado.

Abraço. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tás à vontade para colocar aqui as linhas que não percebeste :P

0

Partilhar esta mensagem


Link 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