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. |
GS 2: Como troca o objeto usando DragAndDrop
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
GS 2: Como troca o objeto usando DragAndDrop
Boa tarde
Dev,
Como que troca um objeto usando drag and drop igual ao minecraft.
Segue o link do gif:
https://gfycat.com/informalfamiliargosling
Como o mouse segurando o objeto ao clicar no outro objeto eles trocam de posiçoes.
Como que faz isso?
Obrigado pela ajuda.
Dev,
Como que troca um objeto usando drag and drop igual ao minecraft.
Segue o link do gif:
https://gfycat.com/informalfamiliargosling
Como o mouse segurando o objeto ao clicar no outro objeto eles trocam de posiçoes.
Como que faz isso?
Obrigado pela ajuda.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
Você pode quando a troca ocorrer, armazenar o objeto do inventario em uma variável temporária, e então substituir o que esta no slot pelo item do mouse. Ao final a variável que representa o item do mouse, atribuir o item temporário que antes estava no slot.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: GS 2: Como troca o objeto usando DragAndDrop
Boa noite
grononmc,
O que tenho que acrecentar no codigo?
Quando clico no objeto ele segura os dois; tentei fazer o que voce falou, mas nao funcionou, pq?
Obrigado pela ajuda.
grononmc,
O que tenho que acrecentar no codigo?
Código: Selecionar todos
if (mouse_check_button_pressed(mb_left)) {
Drag = instance_position(mouse_x, mouse_y,self);
}
Event Step
if Drag!= noone
{
if mouse_check_button(mb_left)
{
Drag.x = mouse_x;
Drag.y = mouse_y;
}
Obrigado pela ajuda.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
Esse é todo o código?
Você poderia usar um objeto controlador para fazer o intermediário entre o item e o slot do inventário, nele você saberia se a posição do mouse esta em cima de um item ou slot.
E na verdade depende da forma que você esta fazendo, você criou um objeto slot ou esta usando grid?
Você poderia usar um objeto controlador para fazer o intermediário entre o item e o slot do inventário, nele você saberia se a posição do mouse esta em cima de um item ou slot.
E na verdade depende da forma que você esta fazendo, você criou um objeto slot ou esta usando grid?
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Re: GS 2: Como troca o objeto usando DragAndDrop
Boa tarde
grononmc,
E um codigo simples de drag and drop, o meu slot e um objeto.
Entao to pensando ainda como travar o item no slot.
Vlw pela ajuda.
grononmc,
E um codigo simples de drag and drop, o meu slot e um objeto.
Entao to pensando ainda como travar o item no slot.
Vlw pela ajuda.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
Fiz um exemplo aqui, para você ter uma ideia.
Ao invés de usar o objeto item seguindo o mouse, fiz com que a variável salvasse o asset(object_index), e simplesmente desenhei sua sprite na tela.
O exemplo é simples mas creio que seja isto que esteja procurando.
InventarioExemplo (v1.4.9999)
Ao invés de usar o objeto item seguindo o mouse, fiz com que a variável salvasse o asset(object_index), e simplesmente desenhei sua sprite na tela.
O exemplo é simples mas creio que seja isto que esteja procurando.
InventarioExemplo (v1.4.9999)
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: Re: GS 2: Como troca o objeto usando DragAndDrop
Boa tarde
grononmc,
Vlw, vou ver como e logica e adaptar no meu. Pq usou o object_index para desenhar o sprite? e para economizar memoria?
Obrigado pela ajuda
grononmc,
Vlw, vou ver como e logica e adaptar no meu. Pq usou o object_index para desenhar o sprite? e para economizar memoria?
Obrigado pela ajuda
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
Sim, eu optei em usar o object_index, para ser mais simples, sem ter que arrastar o objeto, fica mais simples salvar somente o ID do asset, já que pelo que vi você não precisará de informações adicionais do objeto tais como características do item, mas mesmo assim se precisar, você pode usar um ds_map, salvando o object_index e as demais informações do objeto, uma variável que faz todo o controle é bem mais prático.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: GS 2: Como troca o objeto usando DragAndDrop
Boa tarde
grononmc,
Entao cara acho que preciso sim, pois faço varias comparaçoes entre o objeto item do player e o que esta no slot. Sabe verificar o que tem mais ataque, qual e o item mais caro e etc.
Cara se usasse o xprevious e o yprevious para troca de posiçao?
Como usa o ds_map?
Muito obrigado.
grononmc,
Entao cara acho que preciso sim, pois faço varias comparaçoes entre o objeto item do player e o que esta no slot. Sabe verificar o que tem mais ataque, qual e o item mais caro e etc.
Cara se usasse o xprevious e o yprevious para troca de posiçao?
Como usa o ds_map?
Muito obrigado.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
O x/yprevious, salva a ultima posição do frame anterior do objeto, não tem o porque utiliza-lo.
O ds_map, é bem simples de usar, nele você tem uma chave e um valor atribuído a ela, é basicamente uma lista de variáveis, veja:
Você pode usar o ds_map_add ou usar o ? para adicionar e ou retornar o valor da chave.
Obviamente vai ter que mudar algumas coisas no código que te mandei, ao invés de adicionar o object_index à global.ItemMouse, deve-se adicionar o ds_map que contém todas as informações sobre o item.
Vou deixar também um código de arrastar o objeto caso queira ainda:
O ds_map, é bem simples de usar, nele você tem uma chave e um valor atribuído a ela, é basicamente uma lista de variáveis, veja:
Você pode usar o ds_map_add ou usar o ? para adicionar e ou retornar o valor da chave.
Código: Selecionar todos
// Adiciona os valores
var item = ds_map_create();
item[?"object_index"] = object_index;
item[?"damage"] = 10;
item[?"attack_speed"] = 3.5;
item[?"value"] = 100;
// Acessa os valores
var velocidade_do_ataque = item[?"attack_speed"];
var valor_do_item = item[?"value"];
// etc...
Vou deixar também um código de arrastar o objeto caso queira ainda:
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: GS 2: Como troca o objeto usando DragAndDrop
Boa tarde
grononmc,
O x/yprevious pensei que ele pegava a ultima posiçao.Vlw
Posso usar variavel no objeto, ex:
E mais lento? Existe uma diferencia?
Muito obrigado pela ajuda.
grononmc,
O x/yprevious pensei que ele pegava a ultima posiçao.Vlw
Posso usar variavel no objeto, ex:
Código: Selecionar todos
ItemAtaque = 1; // valor fictício
ItemDefesa = 10;
...
Muito obrigado pela ajuda.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
Sim o x/yprevious pega a posição anterior, mas a não a posição em que o item foi criado.
A única diferença é que, na outra você usa ds_map, ao invés da instancia, lento não fica.
A única diferença é que, na outra você usa ds_map, ao invés da instancia, lento não fica.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: GS 2: Como troca o objeto usando DragAndDrop
Boa noite
grononmc,
Qual e a recomendaçao de uso: ds_map ou instancia?
Obrigado pela ajuda.
grononmc,
Qual e a recomendaçao de uso: ds_map ou instancia?
Obrigado pela ajuda.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
Qual se sentir melhor, vai do gosto ou propósito.GhostPower escreveu:Boa noite
grononmc,
Qual e a recomendaçao de uso: ds_map ou instancia?
Obrigado pela ajuda.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: GS 2: Como troca o objeto usando DragAndDrop
Boa noite
grononmc,
Blz, vou de instancia mesmo pq ja estou familiarizado.
Obrigado pela ajuda.
grononmc,
Blz, vou de instancia mesmo pq ja estou familiarizado.
Obrigado pela ajuda.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: GS 2: Como troca o objeto usando DragAndDrop
Boa noite
grononmc,
Estou tentando fazer a troca, mas antes queria que o objeto item seguisse o mouse quando eu click(pressed) ate quando clicar de novo para parar.
Olha o codigo usando:
O codigo esta certo, pois testei ele quando e comprado o item segue o mouse.
O que esta errado?Por que quando e clicado(pressed) e diferente?
Muito obrigado pela ajuda.
grononmc,
Estou tentando fazer a troca, mas antes queria que o objeto item seguisse o mouse quando eu click(pressed) ate quando clicar de novo para parar.
Olha o codigo usando:
Código: Selecionar todos
var itemDrag = instance_position(mouse_x, mouse_y, self);
if(global.ItemMouse == noone) {
if(mouse_check_button_pressed(mb_left)) {
x = mouse_x;// Segue o mouse
y = mouse_y;//
if(itemDrag != noone)
global.ItemMouse = itemDrag;
}
}else {
if(mouse_check_button(mb_left)) {
global.ItemMouse.x = mouse_x;
global.ItemMouse.y = mouse_y;
}else {
global.ItemMouse = noone;
}
}
O codigo esta certo, pois testei ele quando e comprado o item segue o mouse.
O que esta errado?Por que quando e clicado(pressed) e diferente?
Muito obrigado pela ajuda.
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
Porque o pressed, é somente uma vez, a parte de seguir o mouse esta na parte caso a condição global.ItemMouse seja diferente de noone, ou seja se estiver com o botão esquerdo apertado e o global.ItemMouse for diferente de noone o item segue o mouse.
O jeito que você esta tentando fazer não funciona porque ele só vai seguir se estiver clicando, o Pressed é somente quando o botão do mouse é pressionado e não segurado.
Para você fazer seguir somente clicando uma vez, pode então pode fazer assim:
Nem testei, mas creio que funcionara.
O jeito que você esta tentando fazer não funciona porque ele só vai seguir se estiver clicando, o Pressed é somente quando o botão do mouse é pressionado e não segurado.
Para você fazer seguir somente clicando uma vez, pode então pode fazer assim:
Código: Selecionar todos
var itemDrag = instance_position(mouse_x, mouse_y, self);
if(global.ItemMouse == noone) {
if(mouse_check_button_pressed(mb_left)) {
if(itemDrag != noone)
global.ItemMouse = itemDrag;
}
}else {
// Segue o mouse
global.ItemMouse.x = mouse_x;
global.ItemMouse.y = mouse_y;
// Quando pressionar novamente solta o item
if(mouse_check_button_pressed(mb_left)) {
global.ItemMouse = noone;
}
}
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: GS 2: Como troca o objeto usando DragAndDrop
Boa noite
grononmc,
Vlw funcionou, Com seria para travar o item dentro do slot e ser "puxado" automaticamente no slot?
Teria que usar:
Muito obrigado pela.
grononmc,
Vlw funcionou, Com seria para travar o item dentro do slot e ser "puxado" automaticamente no slot?
Teria que usar:
Código: Selecionar todos
slot = instance_position(mouse_x, mouse_y, obj_slot); //verifica se esta em cima do slot
- Chuaschinai
- Colaborador
- Reações: 6
- Mensagens: 198
-
Re: GS 2: Como troca o objeto usando DragAndDrop
Sim, você pode checar com o instance_position, caso esteja em colisão, ele adicionar no slot sem precisar soltar o botão e desabilita a variável do mouse.
- GhostPower
- Membro
- Reações: 0
- Mensagens: 97
Re: GS 2: Como troca o objeto usando DragAndDrop
Boa tarde
Chuaschinai,
Estou tentando fazer mais o que esta errado?
Obrigado pela ajuda.
Chuaschinai,
Estou tentando fazer mais o que esta errado?
Código: Selecionar todos
var itemDrag = instance_position(mouse_x, mouse_y, obj_item);
var slotItem = instance_position(mouse_x, mouse_y, obj_slotItem);
if(global.ItemMouse == noone) {
if(mouse_check_button_pressed(mb_left)) {
if(itemDrag != noone)
global.ItemMouse = itemDrag;
}
}else {
global.ItemMouse.x = mouse_x;
global.ItemMouse.y = mouse_y;
if(mouse_check_button_pressed(mb_left)) {
if slotItem != noone // Ele nao verifica se esta em cima do slot?
{
var itemTemp = itemDrag; // Salva o item
itemDrag = global.ItemMouse; // Troca o item
global.ItemMouse = itemTemp; // Muda o item
mouse_clear(mb_left);
}
}
}
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 1 visitante