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

axpppp

Picturebox + Timer

24 mensagens neste tópico

Boas

estou a desenvolver um jogo como projecto final de curso, o jogo é o Bomberman....

so tenho uma duvida....quando for para por as bombas..se eu usar a função timer o programa da me crash...(precisava de um quadcore pra conseguir correr o programa em condições, muito devio a sucessiva actualização da picturebox), e o meu professor falou me das threads...mas sinceramente ja andei a procura de informação acerca de threads/threading...e acho que nao consigo consiliar as 2 coisas....

alguem me pode ajudar??

cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja estudei um dos links que meteram ai em cima....mas nao sei cmo os aplicar no meu codigo

será que conseguem arranjar exemplos...é que os exemplos que tem num link nao consigo ver porque os ficheiros nao abrem com o meu VB...

cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

não entendo porque queres usar thread  ... threads não servem para isso. Não queres mostrar o código onde leva muito tempo ou bloqueia ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

jpaulino.. parece qe é para evitar o esqueci-me do termo... lol...(para ficar tudo a modos que crashado, e obter a actualização sem os tradicionais Flicker's)..mas que actualização tas tu a fazer da picture box? que tamanho tem a imagem... não me parece que se justifique a utilização de threads... ate porque threads é muito bom... mas para entrar nisso...é do piorio... e ainda mais se tiveres que interagir sobre essas threads com os delegates...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a imagem tem 25x25 pixels...e se eu soubesse cmo fazer so refresh aquela imagem especifica ou aquela zona da picturebox onde a imagem esta era mais facil...mas eu tenho que fazer refresh a picturebox inteira...ou seja desenhar o nivel todo de novo e o boneco...

p.s eu postei aqui um reply ontem com codigo...acho que fugiu  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é isso que eu faço....e é isso que me causa tantos problemas pq faz o refresh a picturebox toda ou seja...desenhar tudo de novo(nivel, boneco,etc)

eu queria que ele fizesse refresh so a um certo quadrado da picturebox...sera que isso é possivel??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consegues mostrar um exemplo para que a malta experimente ?

Isto sem código não é fácil! :P

@José Lopes,

Isto de usar threads já começa a ser básico. Em caso de dúvidas usasse um Backgroundworker e já está. E só fazeres uns testes e vês que é simples. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

 For y = 0 To linhas
            For x = 0 To colunas
                If matriz(x, y) = 10 Then

                    Timer1.Start()

                    If numani >= maxani Then
                        numani = 1
                    Else
                        numani = numani + 1
                    End If

                    e.Graphics.DrawImage(imgbomba(numani), CBX, CBY, tambx, tamby)

                    PictureBox1.Refresh()

                    Timer1.Stop()

                End If
            Next
        Next

eu pra ter o nivel de jogo tenho uma matriz por tras, e cmo esta em cima ele vai percorrer a matriz toda a procura de um valor 10, o valor que dei as bombas, se for 10 ele vai ter que desenhar a bomba e sua animaçao...

jpaulino como é que se usa um Backgroundworker?? tens algum link sobre isso??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja estudei o backgroundworker...

implementei no meu codigo..mas acontece o mesmo que com o timer... :rant_01:

o programa fica muito lento :S :P

alguem sabe mais alguma opçao que possa usar??

consegui por a dar da seguinte maneira...

consigo meter a animação da bomba mas so quando clico nas teclas.....ou seja clico no "A" o boneco anda pra a cima e a bomba tambem faz a sua animação...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

entao o Panel1.Invalidate(rc)

é tipo o picturebox1.refresh mas so naquela zona da bomba neh?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tipo o problema em si ta resolvido...

mas com o invalidate as imagens da animação da bomba mal aparecem, isto é a animaçao fica extremamente rapida...sera que da pra meter a animação mais lenta....

neste momento nao estou a usar nenhum timer, thread ou o que quer que seja.....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A tua aplicação está rápida de mais? Isso é muito bom, quem me dera que todas as aplicações fossem muito rápidas, não tinha que andar a optimizar código, theads, etc...

Naturalmente que a aplicação está rápida, os nossos computadores são rápidos, para a animação ser mais lenta tens que usar um timer ou/e aumentar o nº de imagens entre pontos.

Se usares um timer, actualizar a imagem de X em X milisegundos experimenta com 100 ou 500 e vai aumentando ou reduzindo para melhorar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas como faço pra que o timer so faça refresh ao rectangulo rc...e nao fazer a picturebox toda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando se faz: Panel1.Invalidate(rc) estás a dizer para fazer refresh no rectângulo rc, no entanto, não estás a forçar o refresh, estás a dizer ao sistema que QUANDO PODER faça refresh aquele rectângulo.

Será esse o problema?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao....

tipo eu ao fazer picturebox1.invalidate(rc) ele corre por 8 imagens...mas corre essas mesmas 8 imagens muito rapido...tao rapido que nem da tempo pra ver..

e eu queria que ele corresse na mesma as 8 imagens mas devegar...por exemplo saltar de 1 em 1 segundo de imagem...

e depois de correr as 8 imagens...vao correr ainda outras 8 imagens (animação da bomba a explodir) no mesmo rectangulo rc

consegui fazer com que as imagens fossem aparecendo mais devagar...

colocando

threading.thread.sleep(100)

, mas ao fazer isto a animação do boneco tambem fica lenta... :down:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ao fazer thread.sleep(100), ela fica parada durante 100ms, e não 1 segundo, 1 segundo são 1000ms

Eu não estou a ver a tua aplicação, nem o que pretendes fazer, uma imagem daria jeito... e mais código também ajuda.

fazes thread.sleep quando? entre imagens? só tens uma thread para a animação toda? não podes separar por várias e fazer o sincronismo das threads?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

http://img17.imageshack.us/img17/5372/bombermanforum.jpg

ta ai uma imagem do projecto a correr...

For y = 0 To linhas
            For x = 0 To colunas
                If matriz(x, y) = 10 Then
                    If anibom >= 8 Then
                        tick = True
                    End If

                    If anibom >= 8 Then
                        anibom = 1
                    Else
                        anibom = anibom + 1
                        Threading.Thread.Sleep(1000)
                    End If

                    e.Graphics.DrawImage(imgbomba(anibom), CBX, CBY, tambx, tamby)

                    Dim rc As Rectangle
                    rc.X = CBX
                    rc.Y = CBY
                    rc.Width = tamby
                    rc.Height = tambx

                    PictureBox1.Invalidate(rc)
                End If

            Next
        Next

eu quero fazer a animação da bomba...e pra isso eu quando clico na tecla pra largar a bomba, o valor da matriz altera-se..no codigo acima o programa corre a matriz toda a procura de bomba se tiver vai fazer a animação da mesma..

o meu professor acompanhante disse me para adoptar pelo backgroudnworker pra ver a animaçao das bombas...mas nao consigo consiliar tudo...

e como seria possivel eu criar varias threads pra os varios tipos de animações? e depois sincronizar as mesmas?

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