[Duvida] como mover uma regiao de grids?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Duvida] como mover uma regiao de grids?

Mensagem por bimorx em Seg 01 Abr 2013, 15:54

Boa tarde novamente GMBR!
Bem, ainda no mesmo projeto q pedi ajuda esses dias (varias kk) ta bem complicado um monte de coisas aki... mas to indo bem, to tentando fazer o game ficar o mais leve e com menos codigos possivel por isso to sempre postando as duvidas q eu não consigo encontrar solução no prof. google, aqui.

Desta vez a duvida é pequena mas parece ser bem complicada, se alguem souber por favor ajuda ae Very Happy
Seguinte, eu fiz um sistema de inventario stackavel (isto é, quanto mais itens tu pega, vai adicionando a quantidade em cima de um mesmo icone), e este inventario o usuario pode mover os itens de lugar a hora q quiser, pegar itens q serão adicionados ao inventario tudo corretamente, o inventario ta quase 100% igual ao do minecraft, POREM, o jogador vai querer andar na room, e eu fiz o inventario usando grids, oq faz o inventario ficar alí parado, pra sempre, e eu não sei como fazer para mover o infeliz do inventario junto ao player... alguem tem alguma solução? eu pensei em colocar a grid do inventario pra ser gerada em relação a view_wview e view_hview, q são as larguras e alturas da View, mas deu no mesmo o inventario fica ainda parado... bem peço q se alguem puder me ajuda novamente! rsrs e peço perdão pelas inumeras duvidas :S

bimorx

Número de Mensagens : 153
Idade : 21
Data de inscrição : 24/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por RafaelCazarotto em Seg 01 Abr 2013, 15:59

pod ser pq o view_wview e o view_hview são o tamanho da view, tenta substituir isso por view_xview e view_yview ;) assim é conforme a viewanda na fase

RafaelCazarotto

Ranking : Nota C
Número de Mensagens : 564
Idade : 19
Data de inscrição : 15/03/2012
Notas recebidas : D-D-D-C-C-B
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por bimorx em Seg 01 Abr 2013, 23:06

tentei também, mas da no mesmo, a grid herda a posição X e Y da view e estaca lá :/

pois eu declaro a grid_set_region no evento CREATE, não da pra ser no step pq a region setada no inicio da grid é -1, onde é -1 não há itens colocados, os itens vão preenchendo com valores 1,2,3, etc... se eu por no step vai ficar setando a mesma região pra -1 sempre, não permitindo q o usuario tenha itens guardados né :/

bimorx

Número de Mensagens : 153
Idade : 21
Data de inscrição : 24/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por Kabeção em Ter 02 Abr 2013, 11:01

Não entendi o que você quiz dizer com herdar a posição da view.
Se é uma grid com informações do itens ela devia começar do 0 e ir até o limite do inventário sem ter nada a vez com a view.
Só na hora de desenhar que você calcula posições...

Você esta criando a grid no tamanho da tela inteira e preenchendo as posições onde os itens ficam?

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por saim em Ter 02 Abr 2013, 11:47

bimorx escreveu:pois eu declaro a grid_set_region no evento CREATE, não da pra ser no step pq a region setada no inicio da grid é -1, onde é -1 não há itens colocados
Espere um minuto. Não tem nada a ver o comando ds_grid_set_region com a "região" da tela que os valores serão mostrados.
Esse comando define o valor das células da grid. -1 pra "vazio" é uma boa.

Agora, a área da tela em que você vai associar graficamente aos valores da grid é uma opção totalmente à parte. Dá pra usar view_xview e view_yview no step event, sim (sugiro usar o END STEP event, por garantia).

Provavelmente você está usando objetos nesse inventário, pra poder trocar a posição dos itens. A posição desses objetos também vai ter que ser amarrada com a da view. Só que aí, talvez você tenha problemas na hora de mudá-los de posição e a view estiver se movendo. Recomendo, nessa hora, definir um "delta" com relação à view e variar o valor desse delta.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por bimorx em Ter 02 Abr 2013, 12:42

olha, estou usando apenas draw_sprites pra mostrar os icones, fiz tudo com arrays, relacionando os objetos blocos q serão pegos pelo player ao icone q será mostrado no inventario.

Kabeção: eu criei um inventario com grids de 32x32, o inventario possui 5x4 quadrinhos de 32x32 ou seja, 160x128 é o tamanho do meu inventario, e ele deverá ser mostrado no centro da view.

E o problema de eu deixar a grid na posição natural e apenas mostrar os itens depois é q o player precisa clickar sobre os itens para remaneja-los no inventario como quiser, e para isso, o mouse tem q estar na grid tal, por exemplo, quando o usuario clickar, eu criei uma variavel para guardar o valor da grid onde o mouse estava em cima e no momento do click da o valor de -1 para esta mesma grid, dai o icone do item fica mostrado na seta do mouse enquanto o usuario ainda "segura" o item nela, e quando ele clickar novamente, se a grid onde a posição do mouse estiver agora for -1, vai atribuir o valor daquela variavel reserva para a grid nova.

Espero não ter ficado mto confuso a explicação, O.o
se tiver eu tento explicar novamente mostrando as funções e variaveis q eu usei.

Duvida continua rs

bimorx

Número de Mensagens : 153
Idade : 21
Data de inscrição : 24/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por Kabeção em Ter 02 Abr 2013, 13:19

Hum, pelo o que percebi seu maior problema é ver a grid de uma forma absoluta ao invés de relativa.
Você não precisa de uma grid de (32*5) x (32*4), uma de 5x4 já é o suficiente.
Só na hora de desenhar que você multiplica pelo tamanho do bloco por exemplo:

Código:
inv = ds_grid_create(5,4);

// Desenhar grid
w = 32; // tamanho do bloco

for (xx = 0; xx < ds_grid_width(inv); xx += 1) {
    for (yy = 0; yy < ds_grid_height(inv); yy += 1) {
        // desenha grid relativo ao x,y do object e blocos com grid_x*w,grid_y*w
        draw_rectangle(x+(xx*w),y+(yy*w),x + ((xx+1)*w),y + ((yy+1)*w),1);
    }
}
Você simplifica sua grid e da mais controle.
Um exemplo desse maior controle é o tamanho dos blocos, basta uma variável e você pode deixa-los do tamanho que quiser.

O mesmo na hora de check clicar:

Código:
px = x; // posição de desenho da primeira celula
py = y; // posição de desenho da primeira celula
w = 32; // tamanho do bloco

if mouse_check_button_pressed(mb_left) {
    gx = ((mouse_x-px) div w);  // ponto x na grid
    gy = ((mouse_y-py) div w);  // ponto y na grid
   
    if (gx >= ds_grid_width(inv)  || gx < 0) gx = -1; // fora dos limites
    if (gy >= ds_grid_height(inv) || gy < 0) gy = -1; // fora dos limites
}

https://dl.dropbox.com/u/60691076/exemplos/grid.gmk

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por bimorx em Qua 03 Abr 2013, 15:09

certo, entendi o q vc disse ai, mas como eu vou dar o valor de -1 ? como vou colocar ou tirar itens do inventario sem mexer com valores de grids?

#EDIT: Ah agora eu consegui ver seu gmk, rsrsrs, é bem assim q ta o meu e q eu preciso tbm, mas deste modo ae o inventario ficará smepre fixo na view??

#EDIT2: Ah perfeito, entendi aqui, ficará sim na view, pois a X é do objeto, então é só eu botar ele pra acompanhar o player.. rs
mas uma duvida cara, na hora em q o player pega um item eu checava todas as grids do inventario e o q estivesse em -1, seria colocado o item, deste modo q vc fez, isso é possivel? @_@

#EDIT3: Não, não deu certo na hora de pegar itens e remaneja-los, pois não tem oq guardar informações ali dentro :/, mas acho q tive uma ideia só n sei como fazer tais calculos, tipo, vou tentar diversas vezes aqui, mas caso vcs saibam... oq eu pensei é o seguinte, como o outro amigo la em cima disse, eu vou deixar a grid region exatamente onde ela está e criar uma variavel q pega a posição do mouse e divide varias vezes, limitando o "falso cursor" a ficar sómente dentro da region da grid q fica parada, assim toda vez q eu clickar vai acionar a variavel com o "falso cursor" e vai checar a posição deste falso cursor e remanejar os itens de lugar, dai no draw sim eu coloco pra desenhar de acordo com a view, acho q foi mais ou menos isto q o colaborador(saim) respondeu né?

bimorx

Número de Mensagens : 153
Idade : 21
Data de inscrição : 24/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por Kabeção em Qui 04 Abr 2013, 11:34

De novo o que você escreveu no faz meu sentido. xD
O script
Código:
if mouse_check_button_pressed(mb_left) {
    gx = ((mouse_x-px) div w);  // ponto x na grid
    gy = ((mouse_y-py) div w);  // ponto y na grid
 
    if (gx >= ds_grid_width(inv)  || gx < 0) gx = -1; // fora dos limites
    if (gy >= ds_grid_height(inv) || gy < 0) gy = -1; // fora dos limites
}
serve exatamente para achar o lugar onde o mouse clicou então porque quer fazer isso de outro modo?

No meu exemplo foram eliminados os espaços desnecessários da grid então todo que você tem a fazer é usar as variaveis gx e gy com a posição da celula da grid e ds_grid_get(inv, gx, gy) para pegar o valor quando o jogador clicar e ds_grid_set(inv, gx, gy, item) para definir o valor quando o jogador soltar o mouse.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por bimorx em Qui 04 Abr 2013, 13:54

Sim sim, isso eu entendi Kabeção, mas tipo, quando o player pega um item no chão, este item automaticamente vai pro inventario pra posição mais proxima da primeira q estiver livre, mas pra isso eu tenho q checar quais posições estão livres e quais não, e também o valor da posição q eu tinha feito era por array, assim porexemplo, quando o item 0,1 fosse escolhido, quando o jogador clickasse no mapa com o botão direito o bloco solido 0,2 seria colocado na posição certa, mas pra isso preciso dar valores às posições, por isso acho q preciso de varias grids pra setar os valores diferentes de cada posição entende?

bimorx

Número de Mensagens : 153
Idade : 21
Data de inscrição : 24/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por PedroX em Qui 04 Abr 2013, 14:07

Tente assim:
Código:
for(i=0;i<ds_grid_height(grid);i+=1)
for(j=0;j<ds_grid_width(grid); j+=1)
{
if (ds_grid_get(grid, j, i)==-1)
{
//adicionar item na posição (j, i)
}
}

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por bimorx em Sex 05 Abr 2013, 14:28

Hm, vou tentar, mas isso dai usando apenas 1 grid, funciona?
pq quando eu for setar o ds_grid_set, vou colocar o id da grid, vai transformar ela inteira no valor tal, não?

bimorx

Número de Mensagens : 153
Idade : 21
Data de inscrição : 24/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por PedroX em Sex 05 Abr 2013, 14:40

Não. Imagine uma ds_grid como uma planilha do Excel. Usando ds_grid_set(id, x,y, valor) você vai definir o valor de uma célula (x, y) na planilha id.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Duvida] como mover uma regiao de grids?

Mensagem por Conteúdo patrocinado Hoje à(s) 14:36


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum