Array 3D não suportado ?

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

Array 3D não suportado ?

Mensagem por Zero. em Sex 29 Nov 2013, 02:46

Eu tentei usa uma array 3d do tipo : variavel[i,a,o] e qndo executei o jogo apareceu um erro de que não era suportado. por quê ? T-T

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Gonçalves em Sex 29 Nov 2013, 02:58

O GM só suporta arrays bidimensionais mesmo, infelizmente. Tem alguns métodos que encontrei na internet mas achei muito gambiarra, mas caso queira tentar:

http://gmc.yoyogames.com/index.php?showtopic=414085
http://gmc.yoyogames.com/index.php?showtopic=571988

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Zero. em Sex 29 Nov 2013, 03:02

Gambiarra é oq eu vou ter q fazer sem poder usar uma array 3D T-T , mas vlw ai.

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Gonçalves em Sex 29 Nov 2013, 03:03

O que você está querendo fazer exatamente? Talvez poderia estar usando ds_map ou grid...

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Zero. em Sex 29 Nov 2013, 03:06

tenho o numero jogodador, tenho o monstro do jogador, e a 3º iria ser a habilidade desse monstro do jogador. Só q tem numeros de habs, e talvez eu fosse usar pra outras coisas tb.

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Gonçalves em Sex 29 Nov 2013, 03:10

Seria isso né?

Código:
variable[player_id,monster_id,skill_id]
E o valor dessa var seria o quê? scratch

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Zero. em Sex 29 Nov 2013, 03:14

sim, seria um script da habilidade.

tipo assim :
habilidade[1,1,1] = scr_tempestade // o slot 1 do monstros 1 do player 1 , é a habilidade tempestade.
habilidade[1,1,2] = scr_terremoto // o slot 2 do monstros 1 do player 1 , é a habilidade terremoto.

e assim vai Happy .

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por saim em Sex 29 Nov 2013, 09:44

Cara... Eu já precisei achei que fosse precisar de uma array 3D e o brendan me quebrou um galho de forma sensacional.
O que ele fez foi dividir uma array 1D em 3 (ou foram 9?) partes e, num script rápido com 3 argumentos, transformar a array 1D em uma 3D. Eu não lembro o script, vou dar uma procurada, mas a forma de usar era assim:
Código:
função[array3D(i, j, k)] := valor;
Como é pouco provável que você precise dos... 32000? Bom, dos limites da array, é uma solução quase mágica.

Vou procurar a solução de novo e volto a postar aqui.
Edit: achei! Poxa, fiquei me sentindo um mal-agradecido, agora, por só ter mencionado o Brendan. Teve muita gente genial postando naquele tópico, muitas soluções alternativas. Só que eu gravei a do Brendan por dividir o limite da array em partes iguais. Nem sempre é o que você quer.

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: Array 3D não suportado ?

Mensagem por Zero. em Sab 30 Nov 2013, 01:45

Saim, eu li o tópico todo! kkkkk achei interessante, mas, me perdi qndo li isso : "é mais fácil elevar o número na potência da razão inversa pra fazer esse cálculo" KKKKKKKKKKKKKK oq é isso cara ? suponho q o Brendan seja o GameMakerTutorias certo ? então, não entendi nada doq ele falou, mas entendi os dos demais (Jiraya). E como usar esse script ?

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Gabreel em Sab 30 Nov 2013, 02:16

Moço, se você for usar banco de dados, qual a real utilidade de uma array desse tamanho? o.õ

Gabreel

Número de Mensagens : 2227
Idade : 20
Data de inscrição : 02/10/2009
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Zero. em Sab 30 Nov 2013, 02:18

n entendi gabreel u.u exemplifique pf hauhsuahs

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Gabreel em Sab 30 Nov 2013, 02:48

FlyAway escreveu:n entendi gabreel u.u exemplifique pf hauhsuahs
Imagino que isso seja pro Vosturia, certo?
Se sim, você vai ter que ter um banco dados, e pode (deve) puxar as habilidades de lá.

Se não, você pode fazer um banco de dados pra fazer a mesma coisa que você faria com as arrays, passando os argumentos correspondentes.


Gabreel

Número de Mensagens : 2227
Idade : 20
Data de inscrição : 02/10/2009
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Zero. em Sab 30 Nov 2013, 03:00

ah, tendi, mas n é pro vosturia, esse projeto ja era, meu irmão mudou ele inteiro '-' , nem é mais esse o nome hsuahsuash

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por PedroX em Sab 30 Nov 2013, 08:58

FlyAway escreveu:Saim, eu li o tópico todo! kkkkk achei interessante, mas, me perdi qndo li isso : "é mais fácil elevar o número na potência da razão inversa pra fazer esse cálculo" KKKKKKKKKKKKKK oq é isso cara ? suponho q o Brendan seja o GameMakerTutorias certo ? então, não entendi nada doq ele falou, mas entendi os dos demais (Jiraya). E como usar esse script ?
Elevar o número na potência da razão inversa é o modo nerd de dizer: tirar a raiz quadrada / cúbica / quarta / etc.

No caso, a raiz cúbica de 32000 é 31. Então você pode dizer que cada indice poderia ir de 0 a 30. Ele estava falando sobre o script do Jiraya.

Estou vendo se acho uma solução sem repetições.

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: Array 3D não suportado ?

Mensagem por Zero. em Sab 30 Nov 2013, 10:29

Bem, o saim disse q conseguiu, se n , espero a conclusão, vou realmente precisar de uma array 3d =/

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por saim em Dom 01 Dez 2013, 23:58

Conseguir, não consegui. Só entendi e concordei com a idéia. Como disse, acabei percebendo que não precisava de muitas dimensões, mas de muitas arrays.

É o seguinte... você quer um valor pra cada combinação de índices da sua array, certo? Bom, e se todas as combinações estivessem numa única array? Te atende? Claro que atende, não seja ranzinza!
O que o script faz é pegar os 3 argumentos e espalhar os valores em posições da array. Você divide a array em pedaços suficientes pra garantir que não vai repetir o índice.
Algo como o primeiro índice ser a primeira casa decimal, o segundo ser a segunda casa decimal e assim por diante. A posição da 3D[1, 5, 9] seria, na 1D, [159]. O script divide igualmente o limite de 32000 elementos da array, sem risco de sobreposição. É, fica um monte de espaço em branco na array, mesmo, mas o computador não se importa. É só não usar esses espaços como se eles estivessem preenchidos.

Eu não lembro como isso foi feito, não vou lembrar agora (talvez, outro dia, mas não acho que vá fazer). Lembro que a solução binária foi a que achei mais da hora, me pareceu mais simples e a divisão ficava melhor. Mas pode ser porque ela se adequava melhor à situação. De cabeça, assim, a potenciação me soa mais lógica.

Enfim, jeito tem. Você tem uma prévia de quantos elementos cada índice pode precisar?

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: Array 3D não suportado ?

Mensagem por Zero. em Seg 02 Dez 2013, 21:32

Olha, eu quero apenas arrays 3D do tipo, habilidade[i,a,o]. Eu entendi o script do jiraya, mas dependendo dos valores na array havia possibilidade de sobreposição, um certo conflito no índice. O jeito binário eu n entendi mto, pois n conheço o método. Mas agora me veio uma ideia '-' . eu posso usar algo do tipo habilidade[string(i)+string(a)+string(o)] e juntar esses valores, sim claro q eu n faria essa junção de strings no indice da array, eu guardaria em uma var e ela seria o indice da array, mas é possivel ? se o limite for 32000, então nunca chegará nem perto, pq usarei apenas arrays 3D, onde o primeiro valor varia de 1 a 8, o segundo de 1 a 9 e o terceiro de 1 a 5. Esse metódo é válido pro meu caso ? Happy

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por Pit Bull em Seg 02 Dez 2013, 22:49

Eu usei ds_list dentro de ds_list dentro de ds_list, ai criei scripts para manusea-las.

Só não te passo as minhas porque elas estão modificadas pro meu jogo(cerca de 60% do código é personalizado).

Pit Bull

Número de Mensagens : 630
Idade : 21
Data de inscrição : 31/08/2010
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://leninja.com.br

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por saim em Ter 03 Dez 2013, 11:29

Vamos lá. Eu não tenho certeza se entendi o que você chamou de "primeiro" e "terceiro", então vou tentar o seguinte...
array[a, b, c], onde
"a" varia de 0 a 7,
"b" varia de 0 a 8, e
"c" varia de 0 a 5

Você poderia usar algo assim
array[script(a, b, c)]

O script poderia ser assim:
Código:
var a, b, c;
a := argument0;
b := argument1;
c := argument2;
// o valor máximo de cada argumento será somado de 1, para o cálculo
var max_a, max_b, max_c;
max_a = 8; max_b = 9; max_c = 6; // já somados
return(a + b * max_a + c * max_a * max_b)
Pra verificar que o script não tem chance de retornar valores iguais, você pode criar um objeto-teste com um draw assim:
Código:
var i, j, k, alt;
alt := 20; // um ponto na altura
for(i := 0; i < 8; i += 1){
   for(j := 0; j < 9; j += 1){
      for(k := 0; k < 6; k += 1){
         draw_text(20, alt, "valor[" + string(k) + "," + string(j) + "," + string(i) + "]=" + string(script(k, i, j)));
         alt += 20;
         }
      }
   }

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: Array 3D não suportado ?

Mensagem por Zero. em Ter 03 Dez 2013, 14:55

Entendi, vou testar, mas a minha idéia n é valida n ? pq se fosse, n teria como dar nenhum conflito.

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por saim em Ter 03 Dez 2013, 16:05

Quase válido. Você teria, ainda, que transformar a string em número real. Seria mais direto fazer

100*i+10*a+o

O problema é em outros casos, não no seu. Casos em que um dos índices pode passar de 9. Com meu script, você divide os 32000 em intervalos do tamanho que você quiser (variando o valor máximo, claro). Com o script do Jiraya, você divide igualmente os dois primeiros índices entre os 32000, sobrando ainda mais 32000 pro terceiro índice.

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: Array 3D não suportado ?

Mensagem por Zero. em Qua 04 Dez 2013, 08:56

Eu entendi o script do jiraya, mas eu n to afim de testar conflitos Razz
Mas o meu no caso eu faria da seguinte forma :
var _var;
//aq os loops do i, a, o
_var = string(i) + string(a) + string(o)
_var = real(_var)
habilidades[var] = scr_terremoto

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por saim em Qua 04 Dez 2013, 09:31

(ué, cadê o post do Jiraya?)
Se você respeitar os limites máximos pra cada argumento, nos 3 scripts (seu, do Jiraya e meu), não tem chance de acontecer conflito. No seu script, o limite pra cada argumento é 9 (de 0 a 9). Se fosse usar 10, então (0, 0, 10) seria igual a (0, 1, 0). Como você não tem intenção de exceder esse limite, não tem risco de dar errado.

Um problema do seu script é que me parece ligeiramente mais lento, por usar funções de texto ao invés de álgebra simples. Eu não sei se é mesmo mais lento, mas fico com essa impressão. Mesmo se for, ainda assim vai ser coisa imperceptível, ainda mais se considerarmos que é um script que não deve ser usado no step.

O outro problema é a minha insistência em querer usar o limite que eu quiser, seja ele qual for. Eu quero um script que, se for usado em outro jogo, funcione perfeitamente. Como ainda não existe "outro jogo", o limite é genérico. Pode ser 3, pode ser 15, pode ser 178 (se usar o truque de 2 x 1 argumentos, do Jiraya). O limite pra 3 argumentos é 31 índices / script, totalizando 30783 índices (ainda dá pra colocar 32 em um deles, mas não mais que isso).

Não sei se usando as equações binárias dá pra melhorar, acho que não.

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: Array 3D não suportado ?

Mensagem por Zero. em Qua 04 Dez 2013, 11:56

Entaum acho q vou usar o meu jeito haushaush, o script seria em um create, e é um jogo caseiro, eu n vou pubilica-lo. Eu entendi os scripts, entaum se surgir o msm problema em outro projeto eu usarei mais nesse estilo do jiraya. N tranquem o tópico, tb qero uma post do jiraya hsuahsuahs. =D

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array 3D não suportado ?

Mensagem por PedroX em Qua 04 Dez 2013, 15:08

Acho que o melhor jeito é usar data structures (list, map, grid).

Fiz um exemplo:
https://dl.dropboxusercontent.com/u/38888521/Exemplos/array_3d.gmk

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: Array 3D não suportado ?

Mensagem por Conteúdo patrocinado Hoje à(s) 12:21


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