max59x Posted May 31, 2008 Report Share Posted May 31, 2008 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 More sharing options...
Revolt Posted June 1, 2008 Report Share Posted June 1, 2008 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 More sharing options...
max59x Posted June 1, 2008 Author Report Share Posted June 1, 2008 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 More sharing options...
DuroPt Posted June 1, 2008 Report Share Posted June 1, 2008 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 http://phoboz.wordpress.com Link to comment Share on other sites More sharing options...
Revolt Posted June 1, 2008 Report Share Posted June 1, 2008 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 More sharing options...
max59x Posted June 2, 2008 Author Report Share Posted June 2, 2008 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. 😛 Link to comment Share on other sites More sharing options...
Revolt Posted June 2, 2008 Report Share Posted June 2, 2008 tás à vontade para colocar aqui as linhas que não percebeste 😛 Revolt Website Antigo Nick: Pauzinhos Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now