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
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


[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 : 2211
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

- Tópicos semelhantes

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