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.

Ajuda com ds_grid

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
DarlesLSF
Membro
Membro
Reações: 0
Mensagens: 107
Localização: Humaitá - RS

Ajuda com ds_grid

Mensagem por DarlesLSF » Dom Jan 27, 2019 9:00 am

Bom dia, estou tentando montar um menu de itens utilizando o sistema de ds_grids. Até o momento tenho isso:

Código: Selecionar todos

itensbatalha = ds_grid_create(7,1);
ds_grid_add(itensbatalha, 150, 22, global.pocoes);
ds_grid_add(itensbatalha, 150, 33,global.pocoesmedias);
ds_grid_add(itensbatalha, 150, 44, global.pocoesgrandes);
ds_grid_add(itensbatalha, 150, 55,global.mana);
ds_grid_add(itensbatalha, 150, 66,global.manamedia);
ds_grid_add(itensbatalha, 150, 77,global.resil);
ds_grid_add(itensbatalha,150, 88,global.elixir);
No caso, minha grade terá apenas 7 linhas e 1 coluna, já que possuo 7 itens para serem usados durante a batalha.
Mas estou tendo problemas na hora de verificar se existe valores adicionados à cada linha e mostrá-los na tela. Ao pesquisar sobre a função ds_grid_value_exists, vi que ele pede essas informações:
Imagem
Como faço pra saber os valores x1,y1,x2,y2? E usar o sistema ds_grid é melhor do que um ds_map ou outro?

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

Re: Ajuda com ds_grid

Mensagem por None » Dom Jan 27, 2019 9:14 am

Essa função é para checar regiões da da grid.

Se você quer checar se há alguma coisa no slot, o ideal é criar um valor nulo, só isso.
Você pode fazer isso manualmente (com 0 ou noone ou como você quiser), mas eu te aconselho a criar um enumerator para isso, assim você cria uma única variável responsável pelo tipo de item.
Exemplo
enum itens
{
nulo,
espada,
pocao,
etc
}

E no slot da grid você coloca item.nulo (ou item.0 que é o equivalente), daí você só precisa checar se a posição que você esta checando é diferente de item.nulo, fica mais fácil ler o código dessa forma.

Assim, sempre que você terminar de usar um item você atribui ao slot o valor, então na prática você nunca vai ter um slot vazio, eles serão preenchidos com valores que correspondem a algum valor.
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: Ajuda com ds_grid

Mensagem por DarlesLSF » Dom Jan 27, 2019 8:54 pm

E como faço pra definir o comprimento e largura da grade?

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

Re: Ajuda com ds_grid

Mensagem por None » Dom Jan 27, 2019 9:17 pm

O tamanho da grid você define no momento de criação.

Ou você está falando para ele mostrar os itens que ele possui.
Ex: dos 7 slots eu só tenho 3 itens, entao ele só mostra 3 itens.
É isso?

Se for isso, ao olhar a sua da_grid, da para perceber que ela está mais para uma lista do que para uma grid, lembrando que
lista = 1 linha
Mapa = 1 linha com "cabeçalho"
grid = n linhas e n colunas.

O jeito mais fácil seria usar uma lista, mas creio que você já está se organizando para usar a sua grid, então o jeito com ela seria criar um script de ordenação, algo mais ou menos assim

for (var i = ds_grid_width(grid); i > 0; i--)
{
for (var j = 0; j < i: j++)
{
if (grid[# 0, j] == item.nulo)
{
var temp = grid[# 0, j]
grid[# 0, j] = grid[# 0, j + 1]
grid[# 0, j + 1] = temp;
}
}
}


O que eu estou fazendo ali é iniciar um laço de repetição que vai do limite máximo da grid até o início dela.
Dentro dele eu criei um laço para ir do primeiro item até o meu limite atual, ou seja na primeira repetição do for superior eu vou olhar tudo, na segunda eu vou olhar tudo-1 e assim por diante.
Então eu vou checar se a primeira posição possui um item nulo, se possui eu quero pegar esse item e passar para frente (os itens nulos tem que ficar no final), então vou pegar o item que está na segunda posição e vou voltar ele uma e vou pegar o item na minha posição e vou avançar uma, vou repetir este processo até rodar toda a lista.

Estou fazendo de cabeça este script e ele claramente não é a melhor forma de fazer isso, logo de cara da para ver que a complexidade dele é ruim, já que a grid é pequena ele não será tão lento, mas em uma grid grande daria problema, da forma como ele está feito, ele também vai rodar por toda a grid mesmo que não tenha nenhum item nela toda, o que não é legal, depois dê uma pesquisada em algoritmos de ordenação se você quiser seguir por este caminho e fazer algo mais bem feito do que eu fiz ^^'
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: Ajuda com ds_grid

Mensagem por DarlesLSF » Ter Jan 29, 2019 2:51 pm

Como ainda sou novato no GM, vou dando uma pesquisada melhor sobre ds_grids, que pra mim ainda é meio difícil de entender, mas obrigado pela ajuda novamente :D

Responder

Quem está online

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