GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


[Resolvido] Referência à instância por string

+3
shatterhand2
itarodrigo
chicoweb
7 participantes

Ir para baixo

[Resolvido] Referência à instância por string Empty [Resolvido] Referência à instância por string

Mensagem por chicoweb Qua 22 Jan 2014, 16:04

Boa Tarde galera,

Como que eu posso me referir a uma determinada instância pelo nome dela, mas tem que ser por string, por exemplo:

Objetos:

Código:
obj_inimigo

Objetos que crio via código:

Código:
inimigo001 = instance_create(100,100,"obj_inimigo")
inimigo001.vida = 2000
inimigo002 = instance_create(100,200,"obj_inimigo")
inimigo002.vida = 500
inimigo003 = instance_create(100,300,"obj_inimigo")
inimigo003.vida = 90000

Ai em determinada situação eu preciso ler o atributo vida do inimigo, mas partindo de uma string, exemplo:

Código:
nome = "inimigo002"
nome.vida += 20

Esse ultimo código não funciona como eu substituo ai pra que ele funcione a partir de uma string?


Última edição por chicoweb em Sex 24 Jan 2014, 11:33, editado 1 vez(es)
chicoweb
chicoweb

Games Ranking : Nota C

Notas recebidas : B+C
Data de inscrição : 15/05/2012
Reputação : 49
Número de Mensagens : 675
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por itarodrigo Qui 23 Jan 2014, 00:01

ao inves de usar:
Código:
nome = "inimigo002"
nome.vida += 20
use
Código:
inimigo002.vida += 20
itarodrigo
itarodrigo

Data de inscrição : 28/08/2010
Reputação : 52
Número de Mensagens : 599
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por shatterhand2 Qui 23 Jan 2014, 00:06

Não tem como fazer funcionar por uma string. A ID da instância é sempre um número.

Mas você declarar a variável que guarda a referência da instância como global.

Tipo:

global.inimigo001 = instance_create(100,100,"obj_inimigo")

global.inimigo001.vida += 20

Eu acho isso uma das maiores bolas fora da linguagem GML... eu realmente gostaria que eu pudesse declarar variáveis do tipo de objetos/classes, como em qualquer linguagem orientada a objetos que existe. Eu entendo que existir apenas os tipos STRING e REAL é pra facilitar a vida de quem não tem contato com programação, mas ainda assim....
shatterhand2
shatterhand2

Data de inscrição : 21/10/2009
Reputação : 11
Número de Mensagens : 649
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0


http://bananabytes.com.br/

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por Jiraya Qui 23 Jan 2014, 01:19

crie um script e nomeie de 'L' de Literal String

coloque o seguinte codigo nesse script

Código:

//L(string)
return execute_string("return "+argument0);

Código:


inimigo001 = instance_create (100 ,100 ,L("obj_inimigo" ))
inimigo001.vida = 2000

nome=L("inimigo001");
nome.vida+=10



nota, nao deve funcionar no gms, pq a funcao execute_string foi removida.
Jiraya
Jiraya

Games Ranking : Nota A

Notas recebidas : A+A
Data de inscrição : 20/03/2010
Reputação : 108
Número de Mensagens : 1134
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://www.facebook.com/seito.washiro.7

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por shatterhand2 Qui 23 Jan 2014, 01:26

Realmente não vai funcionar no GMS Smile

Eu entendo pq Execute String foi removido, mas já foi uma mão na roda várias vezes Smile
shatterhand2
shatterhand2

Data de inscrição : 21/10/2009
Reputação : 11
Número de Mensagens : 649
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0


http://bananabytes.com.br/

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por saim Qui 23 Jan 2014, 11:25

Por que você precisa lidar com strings?
Estou perguntando porque já tive situações em que acreditei ser mais fácil agir assim, usando strings, e acabei caindo em arrays. Talvez seja o seu caso.

Por exemplo, se você está fazendo um contador de instâncias e quer jogar o número no nome, é mais fácil usar arrays.
Por exemplo:
Código:
inimigo[001] = instance_create(100, 100, obj_inimigo);
inimigo[001].vida = 2000;
inimigo[002] = instance_create(100, 200, obj_inimigo);
inimigo[002].vida = 500;
inimigo[003] = instance_create(100, 300, obj_inimigo);
inimigo[003].vida = 90000;
Aí, quando for ler o atributo, use o índice ao invés da string:
Código:
indice := 2;
inimigo[indice] . vida += 20;
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por Kabeção Qui 23 Jan 2014, 13:55

No GMS use asset_get_index(name) para retornar a id de qualquer recurso no jogo.

Mas não há nem uma vantagem em fazer isso!
Código:
// Porque fazer isso:
inimigo001 = instance_create(100,100,asset_get_index("obj_inimigo"));
inimigo001.vida = 2000;
inimigo002 = instance_create(100,200,asset_get_index("obj_inimigo"));

// Se assim é muito mais fácil e com melhor performance
var oid = obj_inimigo;

inimigo001 = instance_create(100,100,oid);
inimigo001.vida = 2000;
inimigo002 = instance_create(100,200,oid);

Esse tipo de coisa de coisa só é útil quando o próprio usuário precisa digitar o nome em tempo de execução, em um editor de mapas para o próprio desenvolvedor por exemplo.
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por Jiraya Qui 23 Jan 2014, 14:04

mais uma, sinceramente nem eu conhecia esse comando.

de fato nao e uma boa ideia usar esse metodo.

n sei como funciona internamente.

mas eu costumo usar nomes super curtos nas minhas variaveis e recursos, imagino que isso diminua o tempo de execuçao.

tipo
sprites eu uso
S0
S1
S2

para audio eu uso
A0
A1
...

o problema e que se torna confuso e trabalhoso saber o que e o que quando estou programando...
Jiraya
Jiraya

Games Ranking : Nota A

Notas recebidas : A+A
Data de inscrição : 20/03/2010
Reputação : 108
Número de Mensagens : 1134
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://www.facebook.com/seito.washiro.7

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por shatterhand2 Qui 23 Jan 2014, 14:28

Isso normalmente é considerado uma má prática de programação. Use nomes de variáveis que tenham algum sentido com o que você está fazendo.

E sempre é bom deixar comentado, na declaração da variável, pra que ela serve dentro do programa Smile
shatterhand2
shatterhand2

Data de inscrição : 21/10/2009
Reputação : 11
Número de Mensagens : 649
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0


http://bananabytes.com.br/

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por chicoweb Qui 23 Jan 2014, 17:34

Eu pensei que havia algo simples, quem ai já programou em flash sabe do que eu to falando ele tem um recurso assim:

_root["nomeobj"].vida

Simplesmente se refere ao objeto pela string seria o mesmo que:

nomeobj.vida

Em todas as outras linguagens de programação que eu estudei tem esse recurso, não é má prática.

A má pratica e sim usa isso ao invés de vetor (tá confesso fiz essa eme [Resolvido] Referência à instância por string 201709 ):

inimigo001, inimigo002, inimigo003

Vendo que isso é mais complicado que pensei, eu decidi usar vetor mesmo o maior problema e que eu fiz essa eme no meu primeiro jogo e ficou umas gambiarras no meio do código confuso hehe.
Mas preguiça de lado tá errado vou futucar tudo e organizar o código dele, e transformar em vetor mesmo.

As soluções de vocês ia servir? sim
Então seu agora vem falando que não vai usar é brincadeira.

Desculpa ae, mas acho que valeu a discussão, troca de informação é sempre ótimo neh!

Obrigado a todos!
chicoweb
chicoweb

Games Ranking : Nota C

Notas recebidas : B+C
Data de inscrição : 15/05/2012
Reputação : 49
Número de Mensagens : 675
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por shatterhand2 Sex 24 Jan 2014, 03:12

Má prática é dar nomes curtos a variáveis e recursos.

Na maioria das linguagens, você faria algo assim:

Obj_inimigo inimigo001 = new Obj_inimigo();

e você criaria uma instância de Obj_inimigo e guardaria a referência a essa instância na variável inimigo001, que seria do tipo Obj_inimigo. Esse é o mundo ideal, mas o GameMaker não dá essa possibilidade Smile
shatterhand2
shatterhand2

Data de inscrição : 21/10/2009
Reputação : 11
Número de Mensagens : 649
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0


http://bananabytes.com.br/

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por Jiraya Sex 24 Jan 2014, 10:20

nao é má pratica, quando se trata de uma linguagem interpretada, quanto menor o codigo, mais rapido é o processo para a execuçao, mas quando a linguagem é compilada, o tamanho da variavel nao faz a menor diferença, achei q soubesse disso..
Jiraya
Jiraya

Games Ranking : Nota A

Notas recebidas : A+A
Data de inscrição : 20/03/2010
Reputação : 108
Número de Mensagens : 1134
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://www.facebook.com/seito.washiro.7

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por theguitarmester Sex 24 Jan 2014, 11:22

-mensagem pelo celular.


ainda não entendi para que servirá, mas tenho uma solução simples para ele, mas só lembre de fazer um ponto final caso não ache o obj que procura:

crie um script que vai chegando o nome dos objeto por objeto, assim:
var i:i=0
while i<500
{
if argument0 = object_get_name(i){return i;break}
}

então na hora de criar a instância, é só chamar o script dentro do campo obj:
ins_create(x,y,n("obj_inimigo001"))

n é o nome do script no exemplo.
theguitarmester
theguitarmester

Games Ranking : Nota C

Notas recebidas : B + C
Data de inscrição : 28/02/2012
Reputação : 139
Número de Mensagens : 2209
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 2 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Plataformas :
  • Unity


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

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por chicoweb Sex 24 Jan 2014, 11:31

Valeu ai mas pelas opiniões dadas aqui da galera, cheguei a conclusão que é melhor fazer pelo método de vetor mesmo.
Pode finalizar o post.
chicoweb
chicoweb

Games Ranking : Nota C

Notas recebidas : B+C
Data de inscrição : 15/05/2012
Reputação : 49
Número de Mensagens : 675
Prêmios : [Resolvido] Referência à instância por string Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Referência à instância por string Empty Re: [Resolvido] Referência à instância por string

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos