No Evento Create do obj_opcoes você precisa declarar uma variável que vai guardar o id do slot a qual ele pertence.
Agora você só precisa definir o id do slot no mesmo código que te passei no post anterior, no momento da criação do obj_opcoes. No Evento Step do obj_slot.
Então, em vez de mudar o valor dos itens usando o nome do obj_slot que fará os itens de todos os slots mudar, você usa o id do slot salvo dentro da variável slot_ID, isso vai fazer mudar apenas os itens daquela instância em especial.
Ex:
Sugiro que você pratique bastante o uso de IDs e como fazer um bom uso delas, pois facilitam um monte na criação dos jogos e quase sempre são necessárias, pois na maioria dos casos nós precisamos alterar apenas uma instância em especial do objeto na cena e não todas elas.
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. |
Inventario e opções ao utilizar os itens
Inventario e opções ao utilizar os itens
Olá pessoal. Olha eu aqui de novo pedindo ajuda e a opinião de vocês.
Então, eu estou fazendo um jogo no gamemaker e eu estive pesquisando um longo tempo sobre inventarios... E consegui criar um bem simples mais legalzinho...
Basicamente, existe um obj_inventario que cria e replica um obj_slot na quantidade que eu determinar... e as subimagens do sprite do obj_slot mostram os item, tipo se eu peguei o item 1 a sub imagem que aparece na sprite do obj_slot é a 1, e assim por diante...
E quando se clica com o mouse de algum slot com itens ele gasta a quantidade do item e zera o slot
Exatamente o que eu queria
Mas agora eu to com um problema...
Eu queria saber como por opções de Usar, combinar, e soltar os itens....
Tipo, eu programei um obj_opçoes que deve ser criado ao clicar com o mouse encima do obj_slot caso ele esteja com itens e num draw o texto das opções é desenhado...
Eu clico, as opções aparecem e eu posso escolher o que fazer.... tudo funciona perfeitamente.
O grande problema é que as opções só aparece para o primeiro slot criado e não para as replicas... como se apenas aquele obj_slot estivesse lá
Minha duvida é: existe alguma forma de identificar cada objeto replicado?
Tipo, obj_slot[1], obj_slot[2] ou sei lá?
Ou não sei, uma maneira mais fácil de exibir as opções sem criar um obj_opções?? tipo no proprio obj_slot?
Estive pensando em colocar no obj_slot um comando de mouse_in e mouse_over para as opções aparecerem, mas não sei ainda como relaciona-la para o slot certo, com os itens certos...
kkkkk Eu estou falando muita besteira aqui?????
Eu ainda sou novata nisso e minhas soluções para os problemas geralmente criam problemas maiores hahaha
Por isso preciso da opinião de vocês =)
Então, eu estou fazendo um jogo no gamemaker e eu estive pesquisando um longo tempo sobre inventarios... E consegui criar um bem simples mais legalzinho...
Basicamente, existe um obj_inventario que cria e replica um obj_slot na quantidade que eu determinar... e as subimagens do sprite do obj_slot mostram os item, tipo se eu peguei o item 1 a sub imagem que aparece na sprite do obj_slot é a 1, e assim por diante...
E quando se clica com o mouse de algum slot com itens ele gasta a quantidade do item e zera o slot
Exatamente o que eu queria
Mas agora eu to com um problema...
Eu queria saber como por opções de Usar, combinar, e soltar os itens....
Tipo, eu programei um obj_opçoes que deve ser criado ao clicar com o mouse encima do obj_slot caso ele esteja com itens e num draw o texto das opções é desenhado...
Eu clico, as opções aparecem e eu posso escolher o que fazer.... tudo funciona perfeitamente.
O grande problema é que as opções só aparece para o primeiro slot criado e não para as replicas... como se apenas aquele obj_slot estivesse lá
Minha duvida é: existe alguma forma de identificar cada objeto replicado?
Tipo, obj_slot[1], obj_slot[2] ou sei lá?
Ou não sei, uma maneira mais fácil de exibir as opções sem criar um obj_opções?? tipo no proprio obj_slot?
Estive pensando em colocar no obj_slot um comando de mouse_in e mouse_over para as opções aparecerem, mas não sei ainda como relaciona-la para o slot certo, com os itens certos...
kkkkk Eu estou falando muita besteira aqui?????
Eu ainda sou novata nisso e minhas soluções para os problemas geralmente criam problemas maiores hahaha
Por isso preciso da opinião de vocês =)
- gabrielsch
- Colaborador
- Reações: 0
- Mensagens: 234
-
Re: Inventario e opções ao utilizar os itens
Você bem que poderia postar o seu código atual para entendermos melhor.
Pelo que eu entendi você cria vários objetos obj_slot e cada um se encarrega de mostrar um item especifico mas eu ainda não entendi como você armazena esse tipo de informação, sem código fica complicado.
Pelo que eu entendi você cria vários objetos obj_slot e cada um se encarrega de mostrar um item especifico mas eu ainda não entendi como você armazena esse tipo de informação, sem código fica complicado.
Re: Inventario e opções ao utilizar os itens
Haha, desculpe não ter colocado os códigos, eu não sabia mesmo como fazer isso.
Vou colocar aqui abaixo:
Ah, esses códigos que peguei, vieram de exemplos de engine que achei aqui no forum e no antigo...
Infelizmente eu vi tantas diferentes que nem sei quem fez esse que estou usando haha
Mas é simples de entender e me serviu muito bem para o que eu quero
Esse é o script responsável por criar os slots:
Esse é o script que gerenciar os itens:
E aqui é o código que fica no evento Draw do obj_slot :
Aqui a imagem de como o inventario fica:
E aqui são as opões que eu estou tentando fazer:
Eu queria que essas opções aparecem ao lado de cada respectivo slot quando o mouse passasse por cima...
E eu, boba e inocente, pensei que colocar um instance_create para gerar o objeto das opções seria o suficiente....
Me enganei feio não é hahaha
Espero que possam me ajudar =)
Vou colocar aqui abaixo:
Ah, esses códigos que peguei, vieram de exemplos de engine que achei aqui no forum e no antigo...
Infelizmente eu vi tantas diferentes que nem sei quem fez esse que estou usando haha
Mas é simples de entender e me serviu muito bem para o que eu quero
Esse é o script responsável por criar os slots:
Código: Selecionar todos
///scr_criar_slots
//quantidade de slots
slots = argument0;
//maximo por slot
max_slot = argument1;
//---------------------
var spr atual;
atual = 1;
spr = sprite_index;
sprite_index = spr_slot;
for(Y = 0 Y < ceil( sqrt( slots)* sprite_height) Y += sprite_height){
for(X = 0 X < floor( sqrt( slots)* sprite_height) X += sprite_width){
//criar slots-----------------
if(atual <= slots){
slot[atual] = instance_create(x + X, y + Y,obj_slot);
slot[atual].item = 0;
slot[atual].quantidade = 0;
slot[atual].X = X;
slot[atual].Y = Y;
slot[atual].pai = id;
//---------------------
atual += 1;
}
}
}
Esse é o script que gerenciar os itens:
Código: Selecionar todos
///scr_item
var slot; slot = 1;
while(slot <= instance_number(obj_slot)){
if(obj_inventario.slot[slot].quantidade < obj_inventario.max_slot
and obj_inventario.slot[slot].item = argument0)
or
(obj_inventario.slot[slot].quantidade = 0)
{
obj_inventario.slot[slot].item = argument0;
obj_inventario.slot[slot].quantidade += 1;
instance_destroy();
exit
}
else
{
slot += 1;
}
}
E aqui é o código que fica no evento Draw do obj_slot :
Código: Selecionar todos
///no evento draw do obj_slot
draw_set_font(fnt_slot);
draw_set_color(c_white)
image_index = item;
x = pai.x + X;
y = pai.y + Y;
draw_sprite(sprite_index,image_index,x,y);
draw_text(x + 20, y + 20, quantidade);
E aqui são as opões que eu estou tentando fazer:
Eu queria que essas opções aparecem ao lado de cada respectivo slot quando o mouse passasse por cima...
E eu, boba e inocente, pensei que colocar um instance_create para gerar o objeto das opções seria o suficiente....
Me enganei feio não é hahaha
Espero que possam me ajudar =)
- Denis Lemos
- Membro
- Reações: 0
- Mensagens: 49
-
Re: Inventario e opções ao utilizar os itens
Já que os slots são objetos, fica bem mais fácil criar o obj_opcoes em cima deles.
Basta colocar um código no obj_slot para quando o mouse estiver em cima dele, então criar o obj_spcoes. Caso o mouse não estiver em cima do obj_slot, então deletar o obj_opcoes que foi criado, se ele existir é claro. Tem que tomar cuidado na hora de deletar o obj_opcoes, para que delete somente o que foi criado pelo slot em uso. Para fazer isso, tem que guardar o id do obj_opcoes criado e deletar somente a instância com esse id, caso contrário todas as instâncias serão deletadas da cena.
No Evento Create do obj_slot
No Evento Step do obj_slot
Não esqueça de colocar um depth menor para o obj_opcoes aparecer na frente do slot.
PS: Eu testei aqui e funcionou lindamente!
Basta colocar um código no obj_slot para quando o mouse estiver em cima dele, então criar o obj_spcoes. Caso o mouse não estiver em cima do obj_slot, então deletar o obj_opcoes que foi criado, se ele existir é claro. Tem que tomar cuidado na hora de deletar o obj_opcoes, para que delete somente o que foi criado pelo slot em uso. Para fazer isso, tem que guardar o id do obj_opcoes criado e deletar somente a instância com esse id, caso contrário todas as instâncias serão deletadas da cena.
No Evento Create do obj_slot
Código: Selecionar todos
options_ID = noone;//Declara a variável para guardar o id da instância do obj_opcoes
No Evento Step do obj_slot
Código: Selecionar todos
if(position_meeting(mouse_x, mouse_y, self))//Verifica se o mouse está em cima deste slot apenas
{
if(options_ID == noone)//Se a id estiver vazia
{
options_ID = instance_create(x,y, obj_opcoes);//Cria uma instância do obj_opcoes e salva o seu id dentro dessa variável
}
}
else//Se o mouse não estiver em cima desse slot
{
if(options_ID)//Se existir uma instância guardada dentro dessa variável
{
with(options_ID)instance_destroy();//Destroi a instância com o id que foi guardado anteriormente
options_ID = noone;//Deixa a id vazia novamente
}
}
PS: Eu testei aqui e funcionou lindamente!
Re: Inventario e opções ao utilizar os itens
Denis! Obrigada pelo ajuda \o/
Eu coloquei ainda uma condição para esse código só executasse quando o slot estivesse com itens e foi exatamente como você falou:
"funcionou lindamente" =D
Mas agora me apareceu outro problema hahaha
(acho que já disse que as soluções dos meus problemas sempre geram problemas maiores)
Então, não é nada com seu código, eu acho... Eu que devo ter feito alguma coisa errada nos outros objetos, copiado algo fora do lugar, ou sei lá...
Mas o código que eu uso para fazer o item ser usado parece gerar algum conflito.
Eu uso esse codigo para quando se clica na opção USAR.
Mas agora ele afeta a todos os slots não apenas ao que eu estou clicando. entende?
Não importa se um slot tem 3 itens, 5, 7 , ou 0 ... se eu utilizar a opção, todos os slots se igualam em numero, mesmo os slots que estão vazios. ou ficam com 2 ou 1 itens marcados (mesmo sem item)
Tenho um exemplo de engine aqui (que não utiliza o obj_opções) que elimina os itens com esse codigo ao clicar com o mouse no obj_slot. e tudo funciona perfeitamente.
Já que esse codigo ficava no obj_slot e agora eu mudei ele para o obj_opções tenho que relacionar as variáveis quantidade e item com o obj_slot que é onde as informações estão armazenadas.
Então eu coloquei obj_slot.item e obj_slot.quantidade para fazer funcionar e, com toda certeza esse deve ser o problema aqui,
o programa está vendo todos os slots como um obj só kkkkkkk
Não sei o que fazer para acertar as coisas :P
Preciso de ajuda!!!
Eu coloquei ainda uma condição para esse código só executasse quando o slot estivesse com itens e foi exatamente como você falou:
"funcionou lindamente" =D
Mas agora me apareceu outro problema hahaha
(acho que já disse que as soluções dos meus problemas sempre geram problemas maiores)
Então, não é nada com seu código, eu acho... Eu que devo ter feito alguma coisa errada nos outros objetos, copiado algo fora do lugar, ou sei lá...
Mas o código que eu uso para fazer o item ser usado parece gerar algum conflito.
Código: Selecionar todos
if(quantidade > 0){
if (item=1){
show_message("Usar item 1?")
quantidade -= 1;
}
if (item=2){
show_message("Usar item 2?")
quantidade -= 1;
}
if (item=3){
show_message("Usar item 3?")
quantidade -= 1;
}
if (item=4){
show_message("Usar item 4?")
quantidade -= 1;
}
}
else{
}
if(quantidade == 0){
item = 0;
}
Mas agora ele afeta a todos os slots não apenas ao que eu estou clicando. entende?
Não importa se um slot tem 3 itens, 5, 7 , ou 0 ... se eu utilizar a opção, todos os slots se igualam em numero, mesmo os slots que estão vazios. ou ficam com 2 ou 1 itens marcados (mesmo sem item)
Tenho um exemplo de engine aqui (que não utiliza o obj_opções) que elimina os itens com esse codigo ao clicar com o mouse no obj_slot. e tudo funciona perfeitamente.
Já que esse codigo ficava no obj_slot e agora eu mudei ele para o obj_opções tenho que relacionar as variáveis quantidade e item com o obj_slot que é onde as informações estão armazenadas.
Então eu coloquei obj_slot.item e obj_slot.quantidade para fazer funcionar e, com toda certeza esse deve ser o problema aqui,
o programa está vendo todos os slots como um obj só kkkkkkk
Não sei o que fazer para acertar as coisas :P
Preciso de ajuda!!!
- Denis Lemos
- Membro
- Reações: 0
- Mensagens: 49
-
Re: Inventario e opções ao utilizar os itens
Sim, é exatamente esse o problema! Lembra do post anterior que eu expliquei que tem que guardar o id do obj_opcoes que foi criado, para poder deletar apenas ele em vez de todas as cópias dessa instância? Esse é o mesmo caso, você precisa guardar o id do obj_slot de onde o obj_opcoes foi criado, para alterar apenas os itens desse slot.Rouca_SG escreveu: Então eu coloquei obj_slot.item e obj_slot.quantidade para fazer funcionar e, com toda certeza esse deve ser o problema aqui,
o programa está vendo todos os slots como um obj só kkkkkkk
Não sei o que fazer para acertar as coisas :P
Preciso de ajuda!!!
No Evento Create do obj_opcoes você precisa declarar uma variável que vai guardar o id do slot a qual ele pertence.
Código: Selecionar todos
slot_ID = noone;//Declara a variável para guardar o id do slot de origem
Código: Selecionar todos
if(position_meeting(mouse_x, mouse_y, self))//Verifica se o mouse está em cima deste slot apenas.
{
if(options_ID == noone)//Se a id estiver vazia.
{
options_ID = instance_create(x,y, obj_opcoes);//Cria uma instância do obj_opcoes e salva o seu id dentro dessa variável.
options_ID.slot_ID = id;//Salva o id desse slot na variável slot_ID do obj_opcoes.
//options_ID.slot_ID = self;
}
}
else//Se o mouse não estiver em cima desse slot
{
if(options_ID)//Se existir uma instância guardada dentro dessa variável.
{
with(options_ID)instance_destroy();//Destroi a instância com o id que foi guardado anteriormente.
options_ID = noone;//Deixa a id vazia novamente.
}
}
Ex:
Código: Selecionar todos
slot_ID.item = 1;
slot_ID.quantidade = 3;
Re: Inventario e opções ao utilizar os itens
Ei, obrigada de novo Denis :D
Eu já estava mesmo planejando usar o seu codigo para concertar o meu inventario, mas eu não sabia bem como representar o que eu estava pensando nos objetos kkkk
Funcionou direitinho \o/
Existe tanta coisa sobre GameMaker que eu não fazia ideia, já aprendi mais uma nova agora hahaha
Vou anotar o uso de ID's na minha lista de estudos, pois com certeza ainda vou precisar muito :D
Estou muito grata pela ajuda!
Eu já estava mesmo planejando usar o seu codigo para concertar o meu inventario, mas eu não sabia bem como representar o que eu estava pensando nos objetos kkkk
Funcionou direitinho \o/
Existe tanta coisa sobre GameMaker que eu não fazia ideia, já aprendi mais uma nova agora hahaha
Vou anotar o uso de ID's na minha lista de estudos, pois com certeza ainda vou precisar muito :D
Estou muito grata pela ajuda!
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante