Criando o nome de uma sprite com variáveis

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

Criando o nome de uma sprite com variáveis

Mensagem por rafarubim em Seg 12 Dez 2011, 14:07

Atualmente fiquei com um problema: preciso formar o nome de uma sprite usando uma variável+uma coisa escrita. Por exemplo: o nome da variável é player_pulando, mas o nome "player" pode variar, então fiz assim:

exemplodevariavel="player"

sprite_index= string(exemplodevariavel) + "_pulando"

>>Desse jeito não dá certo, pois ambos "player" e "_pulando" estão entre aspas, mas se não houvessem aspas, daria um erro dizendo: unknow variable "_pulando" ou unknow variable "player". O que faço?

rafarubim

Número de Mensagens : 65
Data de inscrição : 20/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Criando o nome de uma sprite com variáveis

Mensagem por Tedi Ripper em Seg 12 Dez 2011, 14:12

acredito que com
variable_global_array_set
variable_local_array_set


Nunca usei nenhum deles, mas acho q isso cria variaveis

flw flw


edit
lol
erro

é isso aki:
variable_local_set
variable_global_set

Tedi Ripper

Ranking : Nota C
Número de Mensagens : 765
Idade : 19
Data de inscrição : 21/11/2010
Notas recebidas : C
Reputação : 24
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Criando o nome de uma sprite com variáveis

Mensagem por irlansn em Seg 12 Dez 2011, 14:17

sprite_index não serve para dar um nome a sprite...
ela serve para definir a sprite do objeto...

Eu acho que sei o que você quer... vou fazer aqui e edito...

EDITE: Por favo, explique melhor o que vc quer e porque vc quer, para eu entender melhor!!!

irlansn

Ranking : Nota C
Número de Mensagens : 482
Idade : 18
Data de inscrição : 18/01/2011
Notas recebidas : B+D
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Criando o nome de uma sprite com variáveis

Mensagem por rafarubim em Seg 12 Dez 2011, 14:53

Vou tentar explicar melhor, apesar de ser meio confuso:

No meu jogo há vários tipos de player (mais de 20), com um objeto para cada.
Todos os players tem sprites com nomes parcidos, só mudando o início:

player_esquerda
player_direita
player_pulando
player2_esquerda
player2_direita
player2_pulando

Dessa maneira, ao apertar a tecla esquerda, quero mudar a sprite do player para que ele ande para a esquerda.

Tenho uma variável chamada global.player_atual, que indica qual player é o atual que está sendo usado. Assim, tenho um script que uso no evento left pressed de todos os players. Nesse script está:

direction=180
speed=4
sprite_index= global.player_atual + "_esquerda" //<<
>>>>>>>>Desse modo, se global.player_atual="player5", no código ficaria:

sprite_index="player5_esquerda" //<<

Como faço para juntar a variável global.player_atual com "_esquerda" ou "_direita" ou "_pulando" ?

rafarubim

Número de Mensagens : 65
Data de inscrição : 20/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Criando o nome de uma sprite com variáveis

Mensagem por irlansn em Seg 12 Dez 2011, 15:12

Assim:
variable_local_set(string(global.player_atual) + "_pulando",valor)

E se não der certo... Infelizmente não sei o que fazer.. confused confused

Mas lembre-se: ser um programador exige muita paciência...
Eu mesma já fiz um jogo com mas de 30 personagens... E fiz um por um!!! (Eu fazia um 5 por dia)

irlansn

Ranking : Nota C
Número de Mensagens : 482
Idade : 18
Data de inscrição : 18/01/2011
Notas recebidas : B+D
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Criando o nome de uma sprite com variáveis

Mensagem por saim em Seg 12 Dez 2011, 15:25

Isso não dá pra fazer. Porque sprite_index é um número, não um texto. Então, o melhor que dá pra fazer é sair testando sprite-por-sprite do jogo e comparar com a string que define o nome da variável. Algo assim:
Código:
if (tá virado pra direita){
  novoNome="player"+"direita"
  for(i = 0; i < 1000000; i+=1){ //1000000 é só um número muito grande
    if (sprite_exists(i)){
      if (sprite_get_name(i)==novoNome){
        sprite_index = i;
        }
      }
    }
  }
Dá pra substituir o 1000000 pelo maior índice de sprite do jogo, ou seja o índice da última sprite que você criou, que não é necessariamente o número de sprites do jogo.
Usei 1000000 pra passar uma idéia do quanto o processo é lento.

Uma alternativa seria gravar esses textos como constantes globais e armazenar as sprites em arrays 2d. Por exemplo:
Código:
andandoEsquerda = 0
andandoDireita = 1
correndoEsquerda = 2
correndoDireita = 3

player1 = 0
player2 = 1

sprite[0, 0]=sprite_do_player1_andando_pra_esquerda
sprite[0, 1]=sprite_do_player1_andando_pra_direita
sprite[0, 2]=sprite_do_player1_correndo_pra_esquerda
sprite[0, 3]=sprite_do_player1_correndo_pra_direita

sprite[1, 0]=sprite_do_player2_andando_pra_esquerda
sprite[1, 1]=sprite_do_player2_andando_pra_direita
sprite[1, 2]=sprite_do_player2_correndo_pra_esquerda
sprite[1, 3]=sprite_do_player2_correndo_pra_direita

jogador = player1 //0
situação = andandoDireita//1
Daí, em alguns eventos específicos você define qual constante chamar pras variáveis "jogador" e "situação".
E manda, por cima disso:
Código:
sprite_index = sprite[jogador, situação]

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: Criando o nome de uma sprite com variáveis

Mensagem por rafarubim em Seg 12 Dez 2011, 15:36

saim escreveu:Isso não dá pra fazer. Porque sprite_index é um número, não um texto. Então, o melhor que dá pra fazer é sair testando sprite-por-sprite do jogo e comparar com a string que define o nome da variável. Algo assim:
Código:
if (tá virado pra direita){
  novoNome="player"+"direita"
  for(i = 0; i < 1000000; i+=1){ //1000000 é só um número muito grande
    if (sprite_exists(i)){
      if (sprite_get_name(i)==novoNome){
        sprite_index = i;
        }
      }
    }
  }
Dá pra substituir o 1000000 pelo maior índice de sprite do jogo, ou seja o índice da última sprite que você criou, que não é necessariamente o número de sprites do jogo.
Usei 1000000 pra passar uma idéia do quanto o processo é lento.

Mesmo não entendendo como usar o "for" eu entendi seu código xD realmente deve dar certo, mas como pode existir até 1000000 de sprites isso não deixa o jogo mais lento n? Até porque usarei isso pra esquerda, pra direira, pra cima,pra baixo e quando o player ataca...

rafarubim

Número de Mensagens : 65
Data de inscrição : 20/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Criando o nome de uma sprite com variáveis

Mensagem por saim em Seg 12 Dez 2011, 15:47

saim escreveu:Usei 1000000 pra passar uma idéia do quanto o processo é lento.
rafarubim escreveu:mas como pode existir até 1000000 de sprites isso não deixa o jogo mais lento n?
Sim, é um processo bem lento, por isso não recomendo. Agora, dê uma olhada no post anterior (editado) e veja se gosta da idéia alternativa.

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: Criando o nome de uma sprite com variáveis

Mensagem por rafarubim em Seg 12 Dez 2011, 16:04

Hum, legal, eu não sabia disso, mas o ruim é que o código fica muito grande,já que farei muitos players... Mas valeu, já vi que pelo jeito não tem mais maneiras e terei que fazer do jeito difícil...

rafarubim

Número de Mensagens : 65
Data de inscrição : 20/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Criando o nome de uma sprite com variáveis

Mensagem por itarodrigo em Seg 12 Dez 2011, 16:20

tente o seguinte:
Código:
execute_string(string(global.player_atual)+"_esquerda");
ou
Código:
execute_string(global.player_atual+"_esquerda");

itarodrigo

Número de Mensagens : 599
Idade : 33
Data de inscrição : 28/08/2010
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: Criando o nome de uma sprite com variáveis

Mensagem por saim em Seg 12 Dez 2011, 17:35

adaptando o código do itarodrigo, você pode usar:
Código:
execute_string("sprite_index="+global.player_atual+"_esquerda");
Mas execute_string também é lento...

Se você considera difícil lidar com arrays, então o que eu sugeri realmente é o jeito difícil. Mas é só uma questão de se adaptar, em pouco tempo você domina a técnica toda.

O que eu chamo de "jeito difícil" mesmo é aquele MONTE de if-else.
Código:
if táPraDireita && táCorrendo && éOPlayer1
sprite_index=player1CorrendoPraDireita

if táPraDireita && táCorrendo && éOPlayer2
sprite_index=player2CorrendoPraDireita

if...
ISSO é desnecessário.

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: Criando o nome de uma sprite com variáveis

Mensagem por Conteúdo patrocinado Hoje à(s) 11:49


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