Mapa Externo

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

Mapa Externo

Mensagem por Luca$ em Sab 29 Set 2012, 14:25

Estou tentando fazer um sistema para carregar mapas externos,achei que sabia,mas não está dando muito certo :S

Estou usando um sistem assim:
1- É uma imagem .png,sendo que cada pixel é um bloco
Oque o sistema faz:
1 - Carrega a imagem;
2 - Lê os pixels;
3 - Desenha os objetos.

Olhem os códigos que estou usando:

Evento Release L key:
Código:

MAPA_LOAD=get_open_filename("Arquivos .PNG|*.png*","");

if MAPA_LOAD!=""
{
surface_free(EDITOR.MAPA)
SPRITE=sprite_add(MAPA_LOAD,0,0,0,0,0)
SPR_W=sprite_get_width(SPRITE)
SPR_H=sprite_get_height(SPRITE)
SURF_SPR=surface_create(SPR_W,SPR_H)
for (i=0; i<SPR_W; i+=1)
{
    for (a=0; a<SPR_H; a+=1)
    {
        PIXEL=surface_getpixel(SURF_SPR,i,a)
        surf_to_screen()
       
    }
};


}

O script surf_to_screen:
Código:

//spike
if PIXEL=make_color_rgb(180,42,17)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,0,i*16,a*16)
}
//Porta Azul
if PIXEL=make_color_rgb(26,78,131)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,1,i*16,a*16)
}
//Ponte Azul
if PIXEL=make_color_rgb(50,105,135)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,2,i*16,a*16)
}
//Parede de Pedra
if PIXEL=make_color_rgb(49,52,18)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,3,i*16,a*16)
}
//Parede de Pedra
if PIXEL=make_color_rgb(49,52,18)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,3,i*16,a*16)
}
//Escada
if PIXEL=make_color_rgb(43,21,9)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,3,i*16,a*16)
}
//Bloco de Pedra
if PIXEL=make_color_rgb(100,113,96)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,4,i*16,a*16)
}
//Bullion de Ouro AZUL
if PIXEL=make_color_rgb(213,196,9)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,5,i*16,a*16)
}
//OURO
if PIXEL=make_color_rgb(254,165,61)
{
surface_set_target(EDITOR.MAPA)
draw_sprite(SPRITES2,6,i*16,a*16)
}
surface_reset_target()


É um script que checa a cor e desenha o bloco,ou,deveria fazer isso.

Alguem sabe o porque de ele não estar desenhando os blocos?

EDIT:

Desculpe,postei na área de GMS,oque estou usando é o Game Maker 8.0.
Algum moderador mova ai para mim.

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por luiz_eldorado em Sab 29 Set 2012, 18:03

Você carregou tudo certo eu acho, mas tipo, você por acaso está desenhando a surface depois?

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 18
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Kapoty em Sab 29 Set 2012, 18:09

Fiz uma pequena engine para você : http://www.mediafire.com/?cgqrsx79rdlqt25

Diga se ajudou.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Luca$ em Sab 29 Set 2012, 18:41

luiz_eldorado escreveu:Você carregou tudo certo eu acho, mas tipo, você por acaso está desenhando a surface depois?
Sim,o código que desenha a surface está em outra parte que não coloquei ali,mas ela está sendo desenhada sim Smile

kapoty escreveu:Fiz uma pequena engine para você : http://www.mediafire.com/?cgqrsx79rdlqt25

Diga se ajudou.

Cara,até ajudaria se fosse do jeito que estou fazendo,mas não é =/
Porque do jeito que você vez,só muda a cor do bloco,e do jeito que estou fazendo,é um sprite pra cada bloco,porque cada bloco é totalmente diferente do outro.

EDIT:

Eu adicionei uma linha ao código para salvar a surface em uma imagem,e constatei:
O erro é que os blocos não estão sendo desenhados na surface,pois a imagem que foi salva estava totalmente em branco.

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Kapoty em Sab 29 Set 2012, 19:05

Uma pergunta : Você está desenhando a sprite na tela antes de executar estes códigos?

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por luiz_eldorado em Sab 29 Set 2012, 19:08

Já ví o problema! Você tá criando duas surfaces, a "SURF_SPR" e "MAPA" (do objeto "EDITOR"). Você está criando uma e desenhando na outra.

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 18
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Luca$ em Sab 29 Set 2012, 19:11

Ooopsss *vergonha*

Tinha esquecido de desenhar o sprite na surface que eu pego as coordenadas pale

Acho que agora vai dar tudo certinho.

EDIT:

Não sei se o jogo do qual estou tentando fazer o editor de mapas existe uma numeração diferente de cores.
Mas,estou me baseando nesta pagina oficial: https://wiki.kag2d.com/wiki/Map

Uso a mesma numeração,mas na hora de carregar,ele carrega aulguns blocos errados =/

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Kapoty em Sab 29 Set 2012, 22:36

GMLucas escreveu:
Não sei se o jogo do qual estou tentando fazer o editor de mapas existe uma numeração diferente de cores.
Mas,estou me baseando nesta pagina oficial: https://wiki.kag2d.com/wiki/Map

Uso a mesma numeração,mas na hora de carregar,ele carrega aulguns blocos errados =/

Tente fazer o seguinte, faça como se fosse um debug-mode e veja se as cores que estão sendo pegadas pelo draw_getpixel coincidem com as cores que você colocou nos IF, para fazer isso pegue a posição exata de uma cor que você deseja testar como por exemplo "x=2;y=9" e faça isso :
Código:
show_message(draw_getpixel(2,9))
Veja se a cor que está sendo mostrada é igual a que deveria ser.

Diga se ajudou em algo.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Luca$ em Dom 30 Set 2012, 18:43

Kapoty,eu testei com uma cor,e deu certo sim,as cores batiam =/
Se vocês quiserem ver a engine,eu posso mandar Smile

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Kapoty em Dom 30 Set 2012, 18:46

GMLucas escreveu:Se vocês quiserem ver a engine,eu posso mandar Smile
Queremos sim, mande-a.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Luca$ em Dom 30 Set 2012, 19:31

Aqui está:
Download

Desculpe se não entender algo,é que não costumo colocar comentários =/

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por theguitarmester em Dom 30 Set 2012, 23:32

Talves falo Bobagem, mas pelo que percebo, você coloca uma cor no ALPHA "digamos" Azul, mas no jogo aparece Verde, é isto sua Pergunta?
Se for, talves seja porque você colocou esta cor em um Objeto já colorido co qualquer cor que não seja Branco, isto é, você estaria colocando uma cor misturada com outra. para resolver isto coloque o Objeto em tons de Cinza/ Preto e Branco.

se não for esta sua dúvida, Desculpe.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Henrique_GJ em Seg 01 Out 2012, 08:29

mas.... como vc vai fazer pra colocar mais de um objeto num mesmo lugar? vai q vc precisa disso õ_o

Henrique_GJ

Número de Mensagens : 1344
Idade : 19
Data de inscrição : 30/12/2009
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://sitedosjogos.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por saim em Seg 01 Out 2012, 09:24

Eu faço isso direto. Criar um mapa em .bmp com uma legenda de cores, pra carregar como objetos, depois. A diferença é que eu crio objetos ao invés de desenhar sprites, mas fora isso, é a mesma coisa.

O primeiro erro que eu vi, você já viu, estava faltando desenhar a sprite pra verificar as cores. O segundo ainda não foi apontado: no final do script "surf_to_screen", você está usando surface_reset_target, o que impede o programa de continuar lendo a surface SURF_SPR. Acho que a função a ser usada deveria ser surface_set_target(SURF_SPR);. No final do código principal, você reseta a surface (e pode até eliminar a SURF_SPR, que já não tem mais utilidade).

Duas coisas que eu mudaria no seu script:
- no script, ao invés de usar um montão de "ifs", eu usaria um "switch". Em tradução livre, um "switch" significa "um montão de ifs". Não acho que seria muito mais eficiente, mas ficaria mais organizado (com certeza seria um pouco mais eficiente).
- pra cada "if", em cada iteração, você está criando uma cor. Isso é desnecessário. Você pode criar as cores antes dos loops "for" e armazená-las em variáveis (cor[0] = make_color_rgb, coisa assim) e acessá-las de dentro do script. Ou, se tiver um pouco mais de tempo, simplesmente use cores que você conheça o valor e escreva o valor dela. Isso, com certeza, aumenta a eficiência do script.

Por fim, já que está usando um script, você ainda pode usar a função "return". Não vai fazer diferença nenhuma com relação à eficiência, mas vai ser divertido usar isso. Você vai retornar só a sprite a ser desenhada, ao invés de desenhar através do script. E a cor, você pode entrar como argumento no script. Aí, o script ficaria mais ou menos assim:
Código:
var corPixel, retornar;
corPixel = argument0;

switch (corPixel){
   case (cor[0]): //spike
   {
      retornar = 0;
      } break;
   case (cor[1]): //Porta Azul
   {
      retornar = 1;
      } break;
   case (cor[2]): //Ponte Azul
   {
      retornar = 2;
      } break;
   case (cor[3]): //Parede de Pedra
   {
      retornar = 3;
      } break;
   case (cor[4]): //Escada
   {
      retornar = 3;
      } break;
   case (cor[5]): //Bloco de Pedra
   {
      retornar = 4;
      } break;
   case (cor[6]): //Bullion de Ouro AZUL
   {
      retornar = 5;
      } break;
   case (cor[7]): //OURO
   {
      retornar = 6;
      } break;
   }

return(retornar);
E o código inicial seria diferente, também:
Código:
MAPA_LOAD=get_open_filename("Arquivos .PNG|*.png*","");

if MAPA_LOAD!=""
{
cor[0] = make_color_rgb(180,42,17);
cor[1] = make_color_rgb(26,78,131);
cor[2] = make_color_rgb(50,105,135);
cor[3] = make_color_rgb(49,52,18);
cor[4] = make_color_rgb(43,21,9);
cor[5] = make_color_rgb(100,113,96);
cor[6] = make_color_rgb(213,196,9);
cor[7] = make_color_rgb(254,165,61);
surface_free(EDITOR.MAPA)
SPRITE=sprite_add(MAPA_LOAD,0,0,0,0,0)
SPR_W=sprite_get_width(SPRITE)
SPR_H=sprite_get_height(SPRITE)
SURF_SPR=surface_create(SPR_W,SPR_H)
surface_set_target(SURF_SPR);
draw_sprite(SPRITE, 0, 0, 0);

for (i=0; i<SPR_W; i+=1)
{
    for (a=0; a<SPR_H; a+=1)
    {
        PIXEL=surface_getpixel(SURF_SPR,i,a)
        imagem_a_usar = surf_to_screen(PIXEL);
        surface_set_target(EDITOR.MAPA);
      draw_sprite(SPRITES2,imagem_a_usar,i*16,a*16)
        surface_set_target(SURF_SPR);
    }
};
surface_reset_target();
surface_free(SURF_SPR);
}
--> foi mal, empolguei e fiz TODAS as alterações que tinha sugerido.

Note que "parede de pedra" e "escada" estão com a mesma imagem. Não tirei isso da minha cabeça, o código original estava assim. Ah, e retirei uma redundância também (tinha um objeto repetido, agora perdi qual era, não vou editar a mensagem pra olhar).

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Luca$ em Seg 01 Out 2012, 12:28

Vlw pelas dicas Saim Smile

Coloquei os 2 códigos que me mandou,mas uma msg de erro aparece:
Código:

___________________________________________
ERROR in
action number 1
of Key Release Event for L-key Key
for object EDITOR:

In script surf_to_screen:
Error in code at line 39:
  return(retornar);
          ^
at position 9: Unknown variable retornar

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por saim em Seg 01 Out 2012, 13:07

É, depois que mandei os códigos, pensei na possibilidade da cor não ser nenhuma daquelas previstas dentro do switch. Se isso acontecer, aparece esse erro. Faz o seguinte, crie mais uma imagem na SPRITES2, pode ser uma imagem com alpha=0, mesmo, só pra ter o que retornar. Daí, acrescente, no final do switch,
Código:
default: retornar = numero_da_imagem_vazia
Em teoria, o código vai desenhar a imagem com alpha=0, ou seja, vai gastar um pedacinho de memória, mas o resultado será o esperado.

Ah, pra ver como usar esse "default" eu tive que consultar o manual e percebi que o parêntese depois do "case" é dispensável. Acho que não faz mal, mas se quiser eliminar, pode.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Luca$ em Seg 01 Out 2012, 13:47

Resolveu o error sim Saim Smile

Mas,o Switch me confundiu tudo com os números,porque agora nem sei oque é oque :S

Tipo,é que não são só aqueles 7 blocos ali,ai agora pra mim editar esse switch eu me confundo todo :S
E nem sei como voltar atrás mais .-.

OBS: https://dl.dropbox.com/u/32092067/Projeto%28Publico%29.gmk

Se quiser baixar pra ver como tá =/

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por saim em Seg 01 Out 2012, 14:07

Eu até gostaria de baixar, mas daqui não tenho nem como baixar nem como abrir.
Achei que, como o código original era seu, o switch seria auto-explicativo, por isso não comentei. O que eu fiz foi o seguinte:
1 - gravei as cores a serem pesquisadas em variáveis (pra não ter que ficar recriando essas cores em cada iteração);
2 - coloquei a cor do pixel como argumento a ser inserido no script. Assim, ao invés de usar a variável PIXEL, eu usei o argument0. Hm..., até perdi a oportunidade de agilizar o código, nessa hora, daqui a pouco eu conserto isso.
3 - num switch, eu verifiquei cada uma das possibilidades e retornei a IMAGEM da sprite a ser desenhada. É que eu tinha notado que todas as imagens eram da mesma sprite, então pensei na possibilidade de retornar só o número da imagem. Isso dá uma generalizada no script, facilitando o uso dele em outros programas. Se as imagens não forem todas da mesma sprite, aí não tem jeito, você vai ter que fazer a parte de desenhar dentro do script mesmo (direciona pra surface pra tela, desenha a sprite na imagem correta e redireciona pra surface do mapa) porque não dá pra retornar 2 argumentos do mesmo script (e não acho que valha a pena fazer 2 scripts).

O que eu perdi a chence de melhorar no passo 2 foi o seguinte: a gente não precisa da variável "PIXEL". Ela só serve pra ser usada como argumento no script. Podemos colocar uma função como argumento do script. O ganho em processamento é mínimo (imperceptível mesmo), então é só questão de organização pessoal.
Código:
(...)
imagem_a_usar = surf_to_screen(surface_getpixel(SURF_SPR,i,a));
(...)
Se achar bobagem, pelo menos lembre-se de fazer de PIXEL uma variável "var".

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Luca$ em Seg 01 Out 2012, 14:19

Opa,agora eu entendi sim,vlw Smile

Cara,será que eu posso te adicionar no MSN?ou Skype,etc.
É que tem um bug que acontece desde que eu criei o programa,já postei 3 vezes no fórum,até agora ninguem conseguiu me ajudar =/

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por saim em Seg 01 Out 2012, 15:48

GMLucas escreveu:Cara,será que eu posso te adicionar no MSN?ou Skype,etc.
Não Sad
Não é má vontade, é que eu não entro nesses programas de bate-papo. Aqui onde estou, é um milagre o fórum não estar bloqueado, porque tudo o mais está. Em casa, a internet é liberada, mas minha agenda não (essa tal de jornada dupla acaba com a produção de games...).
Eu estou sempre no fórum, sempre tentando ajudar casos como o seu. Se não postei nada na sua dúvida, ou achei que alguma das respostas seria suficiente sem necessidade de complementação (eu sou muito metido a alterar códigos dos outros) ou não sei responder. Seja como for, deixe um link pra ela que eu dou uma olhada.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Luca$ em Seg 01 Out 2012, 15:58

Aqui está:
Erro no posicioanamento da view

O tópico está na area de GMS,mas é GM8 msm,é que eu confundi :S

É meio velha a engine,mas acredito que seja o msm problema.

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Mapa Externo

Mensagem por Conteúdo patrocinado Hoje à(s) 16:25


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