Qual o problema com o meu FOR ???

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Qual o problema com o meu FOR ???

Mensagem por Denis Lemos em Seg 25 Out 2010, 18:54

Eu quero que seja checado todos os pixeis de uma sprite, back, ou surface que seje, e fiz este script usando o comando for:
Código:

w=surface_get_width(desenho)
h=surface_get_height(desenho)

if pode_chekar=true
{
    surface_set_target(desenho)
    for (xx=0;xx<w;xx+=1)
    {
        draw_point_color(xx,yy,c_red)
    }
    yy+=1
    if yy>h { pode=false;yy=0;xx=0 }
    surface_reset_target()
}
Ele até funciona, mas o FPS cai para 1 no começo e depois de ele checar umas 6 linhas daí aumenta um pouquinho e fica com FPS um pouco mais auto !
Gostaria de saber se eu usei o "FOR" errado ou o que, e se tem um método mais rápido de se fazer isso, pois na "Horizontal" é checado quase que instantaneamente, mas para ir descendo que fica uma carroça !

OBS: Eu não quero pintar toda a surface ou sprite, senão eu usaria draw_line() ou draw_retangle(), eu coloquei o draw_point para ir acompanhando a velocidade que vai checando os pixeis, pois eu preciso checar pixel por pixel !

Valew, fico no aguardo !!!

Denis Lemos

Número de Mensagens : 938
Idade : 28
Data de inscrição : 17/05/2009
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por Gabreel em Seg 25 Out 2010, 19:00

Denis, isso acontece com todos tamanhos de imagem?

no javascript, quando faço for"s" muito grandes o navegador trava um pokinho ao carregar..

Creio que você saiba que os eventos draw tendem a lagar o jogo.. se você fosse fazer 1024 pontos na tela, bom, imagina né...

E o que seria yy? x.x

Gabreel

Número de Mensagens : 2227
Idade : 20
Data de inscrição : 02/10/2009
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por PedroX em Seg 25 Out 2010, 19:15

Nessa parte:
surface_set_target(desenho)
for (xx=0;xx {draw_point_color(xx,yy,c_red)}
yy+=1
if yy>h { pode=false;yy=0;xx=0 }
surface_reset_target()

O 'yy+=1' nao teria que estar dentro do loop, para ele aumentar de acordo com o w?

Na verdade, eu acho que todo o codigo abaixo do loop devia estar dentro dele....
FLW

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por Denis Lemos em Seg 25 Out 2010, 19:39

BieL
O XX, e o YY são variáveis que eu criei para as coordenadas, e é por eles que eu percorro a imagem !

Acontece com todos os tamanhos de imagem, desse jeito que está o código, ele checa na "HORIZONTAL" praticamente instantâneamente, mas na vertical vai muito devagar, eu gostaria de saber se dá para melhorar o código, já tentei colocar um "FOR" dentro do outro para fazer o YY descer rápidão também , mas tranca na hora heh heh heh !!!

Pedro Já tentei assim e Se eu faço isso ele desce em linha na diagonal e cheka só uns poucos pixeis, e preciso que checke todos os da primeira linha de cima e só depois mude para a linha de baixo !

EX: Cada número abaixo é um pixel da imagem !

1 2 3
4 5 6
7 8 9

Eu quero que comece a chekar do 1 , assim ele chega até o 3, desce uma linha e começa do 4 e vai até o final chegando no 6 e pule para a próxima linha !
Tipo do 1 até o 3 vai "instantâneo", mas para pular para a linha de baixo e começar do 4 ele vai bem devagar, pois como você mesmo falou o YY está fora do loop !
E se eu coloco o YY dentro do loop, os pixeis checados são apenas 1,5,9, faz realmente mais rápido, mas só percorre uma linha na diagonal !

Denis Lemos

Número de Mensagens : 938
Idade : 28
Data de inscrição : 17/05/2009
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por vinians em Seg 25 Out 2010, 19:50

Denis, tudo blz???
Então, no seu script não vi nenhuma checagem, apenas você pinta o surface de vermelho. Parece que a cada linha voce muda o target. Pra ficar mais rapido é melhor vc criar um script que faça de uma vez só e não fique mudando toda hora. Qualquer coisa podemos te ajudar.

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por Denis Lemos em Seg 25 Out 2010, 19:57

Pintar de vermelho é só para eu ver a velocidade em está indo a checagem, na verdade eu preciso checar a cor dos pixeis de um por um !

Vou te mostrar uma engine com o exemplo do que eu quero por MP, a função funciona perfeitamente, mas fica muito lento !

Denis Lemos

Número de Mensagens : 938
Idade : 28
Data de inscrição : 17/05/2009
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por vinians em Seg 25 Out 2010, 20:07

Denis Lemos escreveu:Pintar de vermelho é só para eu ver a velocidade em está indo a checagem, na verdade eu preciso checar a cor dos pixeis de um por um !

Vou te mostrar uma engine com o exemplo do que eu quero por MP, a função funciona perfeitamente, mas fica muito lento !
Hum... entendi, manda la que dou um bizoi!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por PedroX em Seg 25 Out 2010, 20:51

eu acho meio lento o draw_get_pixel(),
ele é muito lento, faria seria programa ficar meio que travando...
é melhor voce usar uma DLL...

Código:

surface_set_target(desenho)
for (xx=0;xx<w;xx+=1)
    {
        draw_point_color(xx,yy,c_red)
        if xx>w-1 {yy+=1}
surface_reset_target()
if yy>h {yy=0;xx=0; break;}
}

}

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por Denis Lemos em Seg 25 Out 2010, 22:51

Não funcionou, mas eu vou tentar em vez do FOR, usar o while que no primeiro teste foi bem rápido, só que sem capiturar a cor do pixel !
Se conseguir posto aqui caso alguém também precise !

[Editado]

Fiz também com o while e a velocidade ficou na mesma, quando usei o draw_getpixel(), é essa função que está estragando minha função, vou mesmo procurar uma DLL que faça isso mais rápido, se alguém souber onde tem uma posta aí, há tem que funcionar o GM8 !
Caso alguém queira ver como ficou o loop sem a função draw_getpixel() aí esta, é a mesma coisa que usar o FOR:
Código:

if pode=true
{
  surface_set_target(desenho)
  while(xx<w)
  {
      draw_point_color(xx,yy,c_red);
      xx+=1
  }
  while(xx>=w) { yy+=1;xx=0 }
  if yy>h { yy=0; pode=false }
  surface_reset_target()

}

vou tentar com DLL mesmo fazer essa função draw_getpixel se eu achar alguma !!!

Editado=3
Achei essa DLL aqui caso alguém queira: http://gmc.yoyogames.com/index.php?showtopic=455787
Ela pega cor até de fora da tela, e esse que é o problema, agora eu não sei como pegar o pixel de uma surface, pois se ela for maior que a tela, vai pegar o pixel de fora dela, mas mesmo assim obriago a todos pela a ajuda, já melhorei e muito a velocidade com essa DLL, agora vou tentar implantar o que o Vinians fez para mim junto com essa DLL, deve ficar muito mais rápido !

Obrigado pessoal !!!

Denis Lemos

Número de Mensagens : 938
Idade : 28
Data de inscrição : 17/05/2009
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Qual o problema com o meu FOR ???

Mensagem por Conteúdo patrocinado Hoje à(s) 20:26


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum