Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

[Game Maker] Como acessar uma variável pelo outro objeto? Tópico resolvido

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
GhostPower
Membro
Membro
Reações: 0
Mensagens: 97

[Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por GhostPower » Qua Out 03, 2018 8:24 pm

Boa noite

Desenvolvedores,

Dei um tempo e agora estou tentando voltando. Bom, tenho objeto(item) que colide com objeto(slot) assim consigo acessar as propriedades do objeto(item), nele tem uma variável que armazena o objeto(tiro). Tenho uma variável global para armazenar o objeto(tiro), mas o problema e que
quando atiro o objeto que "sai" e o objeto(slot).

Abaixo o fragmento do código.

Código: Selecionar todos

Step Event:
...

//variável no item --- itemTiro = obj_tiro; 

global.tiroSalvo = other.itemTiro;

...
No objeto dispara:

Código: Selecionar todos

...
instance_create(x,y,global.tiroSalvo);
...
E ai pessoal alguém com atirar o objeto(tiro)?

Desde já obrigado pela ajuda.

Avatar do usuário
jonnyall
Membro
Membro
Reações: 0
Mensagens: 59

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por jonnyall » Qua Out 03, 2018 9:09 pm

Cara, eu não entendi bem mas se for oq eu to pensando esse Step event seria o evento de colisão de slot com item pra pegar o tiro ? Pq se esse other esta em steep, ele so vai retornar ... não sei :V, mas algum numero q pode se referir alguns dos outros objetos, não sei se vc só errou escrevendo aqui mas se caso for isso, tente mudar esse evento steep para o de colisão
AS: Jonnyall

Imagem

Avatar do usuário
ValdeciVieira
Moderador
Moderador
Reações: 8
Mensagens: 122
Localização: Rio de Janeiro, Brasil

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por ValdeciVieira » Qua Out 03, 2018 9:39 pm

Código: Selecionar todos

Step Event:
...
//variável no item --- 
itemTiro = obj_tiro;
global.tiroSalvo = itemTiro;
...
Só tirar o other do código :palmas:
Deixe-me explicar (mesmo que eu não tenha certeza)  
itemTiro = obj_tiro;
Aqui você definiu a variável itemTiro como um objeto (no caso o objeto é o obj_tiro),então sempre que você chamar a variável itemTiro,retornará o obj_tiro.
Caso não tenha o resultado que você queira,fale oque você esta querendo fazer mais detalhadamente. :o.-:

Avatar do usuário
GhostPower
Membro
Membro
Reações: 0
Mensagens: 97

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por GhostPower » Qua Out 03, 2018 10:21 pm

Boa noite

jonnyall e Mega

Jonnyall:

Cara, esta no Event step no objeto(slot), houve uma colisão assim uso o other ou uma variavel qualquer para acessar o objeto(item) na variável itemTiro. Pelo meu código uso no Event Step.

Mega:

Cara coloquei propositalmente o // para indicar um comentário dentro do código. Apenas informando que no objeto(item) que colide com o objeto(slot) tem uma variável que armazena o objeto chamado obj_tiro para fazer o disparo.

Para esclarecer mais duvidas olha o código do objeto(item):

Código: Selecionar todos


itemNome = "Super"
itemTiro = obj_tiro;
itemValor = 100;
...
O problema e que ele não acessa a variável itemTiro e não sei o pq ele instancia o objeto(slot) no lugar

Obrigado pela ajuda.

Avatar do usuário
jonnyall
Membro
Membro
Reações: 0
Mensagens: 59

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por jonnyall » Qui Out 04, 2018 12:22 am

Haaa sim, oq VC pode fazer no steep event é usar a função instace_plance

Código: Selecionar todos

Steep Event 

var tempitem = instace_plance(x, y, obj_item);

if tempitem 
      global.tiroSalvo = tempitem.itemTiro;
      
 
Bom assim VC identifica qual foi o objeto item q colidiu com sloot e ainda pega sua id, (no caso de VC ter mais de uma instância item)

Desculpa a formatação, é q estou no celular
AS: Jonnyall

Imagem

Avatar do usuário
GhostPower
Membro
Membro
Reações: 0
Mensagens: 97

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por GhostPower » Qui Out 04, 2018 9:25 am

Bom dia
Jonnyall,

Cara, não quero o id da objeto(item) que colide com o slot, quero acessar a variável no objeto(item) que armazena o objeto(tiro).

Troquei o event para Collision Event, porem não acessa a variável também.

Obs.: Eu consigo acessar todas as variáveis do objeto(item), mas não consigo instancia a variável que armazena o objeto(tiro).

Obrigado pela ajuda.

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por None » Qui Out 04, 2018 10:26 am

Eu li umas 5x seu primeiro post e ainda não entendi exatamente o que você quer.

Então deixa eu ver se tenho ideia do que você quer.

Você possui um objeto que vai atirar.
Este objeto só vai ganhar carga quando colidir com o item?

Sério cara, acho que o problema é mais de comunicação do que de qualquer coisa, só para escrever duas linhas de interpretação eu precisei olhar mais 3-4x sua primeira postagem.
Tente explicar melhor o que você quer primeiro, depois como você quer
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por DarlesLSF » Qui Out 04, 2018 11:09 am

Eu realmente gostaria de te ajudar, mas não consegui entender direito.
Mas se tu quer acessar a variável de outro objeto, não seria só fazer algo do tipo:

Código: Selecionar todos

with (objeto_que_você_quer_acessar_a_variável)
{
// ação desejada
}

Avatar do usuário
GhostPower
Membro
Membro
Reações: 0
Mensagens: 97

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por GhostPower » Qui Out 04, 2018 5:03 pm

Boa tarde
a todos,

Vamos la,

Tenho dois objetos.

Objeto = slot para item.

Objeto = item.

Usando o drag and drop levo item para o slot.

Assim o objeto item colide com o objeto(slot).

No objeto item tem uma variável do tipo objeto. --- para armazenar um objeto.

Como faço para guardar este objeto em uma variável?

Tentei explicar passo a passo.

Obrigado pela ajuda de todos.

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por None » Qui Out 04, 2018 11:18 pm

Eu acho que eu entendi.

Neste caso você só precisa usar o object_get_name(Index); e pronto.
O ideal é criar uma variável e guardar nela está informação.

Desta forma você pode instanciar esta variável que ele cria um objeto com o nome guardado nela.
Talvez você precise usar other.id, mas não acho que seja necessário.

Eu não tenho certeza se este recurso exite em versões mais antigas do GM, então talvez você precise usar o asset_get_index, neste caso você provavelmente vai precisar de criar dentro de cada objeto que será criado uma variável de texto com o nome deles como está no seu projeto.

Espero ter ajudado ^^'
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
GhostPower
Membro
Membro
Reações: 0
Mensagens: 97

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por GhostPower » Sex Out 05, 2018 11:36 am

Bom dia,
None

Cara então e isso mesmo que quero fazer, mas ele esta pegando o objeto(slot).

No Collision do objeto slot estou fazendo isso:

Código: Selecionar todos


instanciaItem = other; 

global.saveObjeto = object_get_name(instanciaItem.objetoTiro);


Depois dentro do objeto item estou declarando a variável assim:

Código: Selecionar todos

....

objetoTiro = asset_get_index("obj_tiro");

....
O que esta errado?

Obrigado pela ajuda de todos.

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: [Game Maker] Como acessar uma variável pelo outro objeto?  Tópico resolvido

Mensagem por None » Sex Out 05, 2018 2:51 pm

Acabei de fazer um modelo.

No meu modelo eu tenho 3 objetos.
Bala
Slot
Arma

Eu preciso colocar a bala no slot, se o slot tiver uma bala ele pode ser movido, quando ele colidir com a arma ele volta à posição inicial e apaga a bala que está nele (passando ela para a arma) e deixando a arma carregada.

A arma só pode atirar se estiver
carregada e vai atirar um tipo de bala específico (a bala possui 2 filhos com cores e velocidades diferentemente).

Eu fiz o teste, consegui passar a bala para o slot, e consegui passar a bala do slot para a arma, mas na hora de atirar não funcionava, descobri o motivo e vou tentar explicar tudo aqui.


No meu código eu fiz o seguinte.
O slot possui uma variável para o tipo de bala, quando a bala colide com o slot ele altera algumas informações, a mais importante (neste caso) é o tipo.
Eu primeiro coloquei other.tipo = self
Isto está ok, mas para facilitar a leitura do código eu coloquei
Other.tipo = self.object_index
Porque eu vou precisar o objectivo Index no get name, então achei melhor usar aqui do que usar o .object_index dentro do get name.

Depois fiz na colisão entre o slot e a arma o mesmo processo, a arma possui uma variável chamada tipo.
No evento (você pode usar o instance place) de colisão do objeto slot com o objeto arma eu fiz o seguinte (de novo, só a parte mais importante)
Other.tipo = object_get_name(tipo);
Também deixei a arma carregada e dei uma carga para ela, mas aqui não tem segredo.

Aí na hora de atirar eu fiz o código de instanciar normalmente na arma
Var bala = instance_create_layer(x, y, layer, tipo) e não dava certo, o motivo: o retorno do get name é string! E a gente precisa de um comando! Entao antes de atirar eu criei outra variável e meu código ficou mais ou menos assim.

Var agora = asset_get_index(tipo);
Var bala = instance_create_layer(x, y, layer, agora)

E pronto, ele criou a bala que eu queria, cada uma com suas próprias características bonitinho.
O único problema que deu é que ao criar o tiro no slot usando o self.object_index eu permiti que ao destruir ele eu também ariscaria a deletar alguma outra bala, então é melhor colocar o object_index dentro do get name para evitar este problema.

Espero que tenha dado para entender.
Qualquer coisa é só falar que eu envio o projeto para você dar uma olhada.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
GhostPower
Membro
Membro
Reações: 0
Mensagens: 97

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por GhostPower » Sex Out 05, 2018 3:48 pm

Boa tarde
None,

Cara pode passa o projeto, não estou entendendo como pego esta variável do tipo.

No meu projeto só a uma colisão que e entre arma e o slot, pq bala? a bala não esta armazenada em uma variável na arma?

Obrigado pela ajuda.

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por None » Sex Out 05, 2018 5:24 pm

Então, eu fiz isso porque se eu usar apenas obj_tiro, na hora de destruir eu iria destruir o objeto e não a instância, destruindo assim todos os tiros existentes.

Eu fiz com dois modelos, um em que o obj_tiro já está no slot e você não precisa arrastar o tiro, teste este modelo e você vai ver que na hora que ele destrói o tiro ele destrói todos.
No outro modelo você arrasta a bala até o slot e então você arrasta o slot para a arma, neste caso você escolhe qual tiro você quer atirar e a arma vai atirar o tiro escolhido.

Os dois modelos são o mesmo projeto e não tem qualquer diferença no código, basta testar arrastando a bala e sem arrastar ela, para remover o risco de apagar todas as balas basta alterar o create do slot (noone ou 0 ou -1 ao invés de obj_tiro).

Link do modelo.



Espero que ajude.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
GhostPower
Membro
Membro
Reações: 0
Mensagens: 97

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por GhostPower » Sex Out 05, 2018 6:02 pm

Boa noite
None,

Cara o meu gm e a versão 1.4, e não consigo abrir ele.

obrigado pela ajuda.

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por None » Sex Out 05, 2018 6:26 pm

Você pode abrir a pasta dele e só pegar os códigos.
Basta abrir a pasta objects que lá vai ter todos os objetos e seus códigos.

Os tiro01 e tiro021 são filho do tiro.
A única diferença nos códigos é o instance create que no GMS2 ele usar instance create layer, de resto fica na mesma.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por None » Sex Out 05, 2018 6:27 pm

Ah, não esquece de escolher abrir com bloco de notas.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
GhostPower
Membro
Membro
Reações: 0
Mensagens: 97

Re: [Game Maker] Como acessar uma variável pelo outro objeto?

Mensagem por GhostPower » Sáb Out 06, 2018 9:20 am

Bom dia
None,

Valeu cara consegui, como seu exemplo fico fácil para entender.

Obrigado pela ajuda de todos.

Trancado

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante