Array de controle global

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

Array de controle global

Mensagem por Isaque Onix em Qua 04 Fev 2015, 14:05

INICIANDO AS ARRAYS
Bom, muita gente me pede ajuda com arrays, é um pouco dificil de explicar, mais eu sempre tento, com exemplos, dicas, etc...
mais, hoje estou aqui para explicar DO MEU MODO, como EU uso arrays.

primeiramente, arrays são como uma lista de dados, exemplo:

na programação:

Código:
array[0,0]=lista00
array[0,1]=lista01
array[0,2]=lista02
array[0,3]=lista03
array[0,4]=lista04
array[1,0]=lista10
array[1,1]=lista11
array[1,2]=lista12
array[1,3]=lista13
array[1,4]=lista14

como eu vejo:
Código:

titulo[primeiro indentificador,segundo indentificador]=valor
titulo = array// é o nome da array

id = 0//é o primeiro indentificador da array atual
valor 0 = lista00//valor da array com o segundo indentificador 0
valor 1 = lista01//valor da array com o segundo indentificador 1
valor 2 = lista02//valor da array com o segundo indentificador 2
valor 3 = lista03//valor da array com o segundo indentificador 3
valor 4 = lista04//valor da array com o segundo indentificador 4

id = 1//é o primeiro indentificador da array atual
valor 0 = lista10//valor da array com o segundo indentificador 0
valor 1 = lista11//valor da array com o segundo indentificador 1
valor 2 = lista12//valor da array com o segundo indentificador 2
valor 3 = lista13//valor da array com o segundo indentificador 3
valor 4 = lista14//valor da array com o segundo indentificador 4
mais isso é bem relativo, cada um tem um jeito de ver e explicar, mais aqui, vou ensinar como manipula-la.

geralmente, eu uso arrays para manipular dados inseridos pelo proprio jogador, então, basicamente, uso quase que uma inteligencia artificial, para que o proprio game intenda oque o jogador quer.
vou usar como exemplo um game em que o jogador deve mover um circulo.
as arrays devem armazenar as seguintes informações:
1: x do item a ser movido, sendo que a variavel não pode ser a x, deve conter outro nome.
2: y do item a ser movido, sendo que a variavel não pode ser a y, deve conter outro nome.
3: id, uma indentificação basica, para ultimo caso. (não é obrigatório, mais sempre uso uma array para armazenar o indentificador do item. "id")

agora, criamos um objeto controle.
no create, inicializamos a contagem deste itens, e a variavel que vai nos mostrar qual item está selecionado.
Código:
contador=-1
sel_id=-1
no step, colocamos um "gerenciador de itens", as ações serão: adicionar, deletar, mover.
Código:
if(mouse_check_button_pressed(mb_left)){
if(keyboard_check(ord('A'))){
contador+=1//contador, almenta para o proximo item não conter o mesmo id deste.(contador é a variavel que "conta" quantos itens foram adicionados, e funciona como controle, para não adicionarmos itens com o mesmo id)
item[contador,0]=mouse_x//x do item
item[contador,1]=mouse_y//y do item
item[contador,2]=contador//id do item
sel_id=contador
}//adiciona um item
if(keyboard_check(ord('D')) && sel_id>=0){
item[sel_id,0]=-100//x do item
item[sel_id,1]=-100//y do item
item[sel_id,2]=-1//id do item (coloco em -1 para saber que foi deletado e não desenhar mais.)
}}//deleta um item selecionado
if(mouse_check_button(mb_left) && sel_id>=0){
item[sel_id,0]=mouse_x//x do item
item[sel_id,1]=mouse_y//y do item
}//move um item
e no draw, colocamos o loop for, que eu gosto muito de usar com arrays.
Código:
for(i=0; i<contador+1; i+=1){//for i=0, inicia o comando com a variavel i no valor 0. i<contador+1; i+=1, enquanto o valor da variavel i, não for igual ao da variavel contador, vai almentando em 1, e cada vez que almenta, executa o codigo abaixo.
if(item[i,2]!=-1){//se o id não for -1 (se não tiver deletado)
if(sel_id=i){draw_set_color(c_blue)}else{draw_set_color(c_red)}//se tiver selecionado, a cor vai ser azul, se não, vermelho.
draw_circle(item[i,0],item[i,1],30,0)//desenha o item, usando o valor das arrays
}}
bem, este é o meu modo de usar arrays, quelquer duvida, fique a vontade para perguntar.

SELECIONANDO ITEM POR CLIQUE

para selecionarmos um item que não existe, precisaremos:


  1. decidir que tipo de seleção faremos
  2. obter o ponto x e y do item
  3. clicar
  4. armazenar o id do item selecionado no controle


sigamos.
eu vejo a seleção das seguintes formas:

1: seleção imediata:
lê os valores de todas as arrays até conseguir o dado desejado e para por ai.
2: seleção complexa:
lê os valores de todas as arrays, seleciona todas que são parecidas com o valor desejado, e continua a leitura das arrays até não ter mais nenhuma para ler.
3: seleção simples:
ta na posição certa? ok! intão seleciona sapoha!

vou usar a 3, se quiserem ver os outros modos, digam, mais como disse, tudo oque eu digo nestes tutoriais são do MEU jeito de ver.

bem, como o modo é SIMPLES, vou apenas passar o codigo para estudo, pode colocar no STEP mesmo.

Código:
if(mouse_check_button_pressed(mb_right)){
for(m=0; m<contador; m+=1){//MAIS ISAQUE, a variavel não era i ao invez de m? gosto de variar U.u ja tive problemas com loops iguais...
if(point_distance(item[m,0],item[m,1],mouse_x,mouse_y)<=15){//se a distancia entre os valores das arrays e a posição do mouse for menor que o tamanho da metade da bola
sel_id=m//guarda o valor desse item na variavel do item selecionado.
}}}

Bom, está aí um de meus métodos de usar arrays. espero comentarios para saber oque acharam =)

ENGINE DESTE TUTORIAL
CONTROLES DA ENGINE:

botão esquerdo do mouse+letra A : adiciona um item a tela
botão esquerdo do mouse+letra D : deleta o item selecionado
botão direito do mouse : seleciona o item que esta próximo ao mouse

Isaque Onix

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

http://spyreserver.16mb.com

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