Conectar-se
Quem está conectado
15 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 15 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 19/03/2008
Número de Mensagens : 267
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuário

seleção de sprites

em Qui 20 Out 2011, 17:13
estou tentando montar um sistema de troca de sprite para um jogo isométrico o nome de meus sprites são os seguinte:

sprites parado:
  • spr_teste_p_costa
  • spr_teste_p_frente
  • spr_teste_p_lado
  • spr_teste_p_d_cima
  • spr_teste_p_d_baixo


sprites andando
  • spr_teste_a_costa
  • spr_teste_a_frente
  • spr_teste_a_lado
  • spr_teste_a_d_cima
  • spr_teste_a_d_baixo


OBS: p de parado, a de andando, d de diagonal.

criei essas variáveis para me auxiliar:
Código:
mouse_destinio_x = x    //garda o destino em x
mouse_destinio_y = y    //garda o destino em y
velocidade = 5
imagem_direcao = 0      //quarda qual direção o player esat andando
imagem_nome = "teste"  //nome da imagem
imagem_index = ""      //nome da imagem montada
andando = "_p"          //garda se estou andando ou parado

e código que fiz foi o seguinte:

Código:
if mouse_check_button(1){
    mouse_destinio_x = mouse_x
    mouse_destinio_y = mouse_y
}

if point_distance(x,y,mouse_destinio_x,mouse_destinio_y) > velocidade{
    andando = "_a"
    move_contact_solid(point_direction(x,y,mouse_destinio_x,mouse_destinio_y),velocidade);
    imagem_direcao = floor((point_direction(x,y,mouse_destinio_x,mouse_destinio_y) + 22.5) / 45)
}else{
    x = mouse_destinio_x
    y = mouse_destinio_y
    andando = "_p"
}

switch (imagem_direcao)
{
    case 0:case 8:  imagem_index = ("spr_" + string(imagem_nome) + string(andando) + "_lado")      image_xscale = -1  break;
    case 1:        imagem_index = ("spr_" + string(imagem_nome) + string(andando) + "_cima")      image_xscale = -1  break;
    case 2:        imagem_index = ("spr_" + string(imagem_nome) + string(andando) + "_costa")      image_xscale =  1  break;
    case 3:        imagem_index = ("spr_" + string(imagem_nome) + string(andando) + "_d_cima")    image_xscale =  1  break;
    case 4:        imagem_index = ("spr_" + string(imagem_nome) + string(andando) + "_lado")      image_xscale =  1  break;
    case 5:        imagem_index = ("spr_" + string(imagem_nome) + string(andando) + "_d_baixo")    image_xscale =  1  break;
    case 6:        imagem_index = ("spr_" + string(imagem_nome) + string(andando) + "_frente")    image_xscale =  1  break;
    case 7:        imagem_index = ("spr_" + string(imagem_nome) + string(andando) + "_d_baixo")    image_xscale = -1  break;
}

sprite_index = imagem_index

eu ando utilizando o mouse e com a divisão do angulo entre eu e o destino eu chego a imagem que o player tem de ter entretanto me parece que a variável sprite_index não aceita uma string como resultado.

já tentei usa comandos como o sprite_get_number, sprite_get_name mas não obtive sucesso.

a quem souber resolver meu problema agradeço antecipadamente.
avatar
Data de inscrição : 31/08/2010
Número de Mensagens : 630
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 15

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://leninja.com.br

Re: seleção de sprites

em Qui 20 Out 2011, 17:21
cria condições:
exemplo:

if ("spr_" + string(imagem_nome) + string(andando) + "_cima")==string(spr_spr_teste_p_frente) {
image_index=2
}else

dai você usa bastante o else,claro que o script ficará grande, então e só criar um script para diminui-lo.
avatar
Data de inscrição : 19/03/2008
Número de Mensagens : 267
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: seleção de sprites

em Qui 20 Out 2011, 18:07
;) value Pit Bull entretanto eu tive todo esse trabalho na intenção de poder trocar a sprite só mudando a varial imagem_nome
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: seleção de sprites

em Qui 20 Out 2011, 18:42
Coloca assim:

Código:
execute_string("sprite_index="+"imagem_index")
avatar
Data de inscrição : 19/03/2008
Número de Mensagens : 267
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: seleção de sprites

em Qui 20 Out 2011, 18:49
eu colocaria assim:

execute_string("sprite_index="+ string(imagem_index))

mais execute_string eu usaria como ultima opção porque é um comando muito lento
avatar
Ranking : Nota C
Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Número de Mensagens : 914
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 5

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://luizgm.blogspot.com/

Re: seleção de sprites

em Qui 20 Out 2011, 19:10
Seria melhor usar o direction, mesmo num jogo isométrico e mesmo com movimentação no mouse. Procure ter uma ideia de como sair o direction de acordo com o angulo da imagem. Tipo:
Código:
switch(direction)
{
case 45:
case 135:
case 225:
case 315
}
Não sei se esses são os angulos certos de um jogo isométrico.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 288

Prêmios
   :
   :
   :
Ver perfil do usuário

Re: seleção de sprites

em Qui 20 Out 2011, 19:55
Ou você pode colocar numa array.
Ou até num ds_map, que é rápido e prático.
E para você não precisar digitar tudo, você pode fazer assim:
Código:
sprites=ds_map_create()
for(i=0;i<=numero de sprites;i+=1){
ds_map_add(sprites,sprite_get_name(i),i)
}

Assim ele irá mapear o nome da sprite com a index dela.
É claro que a primeira id no exemplo seria 0. Você tem que adaptar o loop.

Depois você pode tentar:

Código:
sprite_index=ds_map_find_value("string que você formou")

Obs: Use o loop se quiser facilitar.

Até mais!
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum