[Atualizado] Menu rotatório

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

[Atualizado] Menu rotatório

Mensagem por NPH em Dom 09 Jun 2013, 13:29

Olá pessoal!
Estou criando um menu rotatório que pelo jeito precisa de uma boa avaliação, pois perdi 7 horas para que o mesmo ficasse pronto (até o momento).
O que esse menu tem de bom???
--> Efeitos sonoros ao girá-lo e na animação do mesmo.
--> Tem capacidade para apenas 6 itens (triângulos).
--> Itens tem seus próprios ícones representando suas funções
--> Tem uma engine minha que exibe mensagens na parte de baixo da tela
--> Resolução baixa (640x480 [padrão])
--> Acho que só...
[EDIT]
--> Pede o nome do jogador
--> O menu fica fechado quando ele está em segundo plano (no jogo e não no Windows!)
--> Adicionei uma engine minha que pede o nome do jogador
--> Fundo trocado para a cor preta
--> Invertida a posição no menu fechar que antes o "X" ficava em baixo

Controles:

-->Para move-lo use as setas [<] e [>]
-->Para Selecionar uma opção use [Enter]

Aí vão 4 imagens "novas" dele:

----------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------

Download(1.55 MB)
Espero que gostem dessa minha ideia...


Última edição por PHProductions em Seg 10 Jun 2013, 18:30, editado 1 vez(es) (Razão : modificações no menu)

NPH

Ranking : Nota B
Número de Mensagens : 452
Idade : 22
Data de inscrição : 28/11/2010
Notas recebidas : B
Reputação : 32
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Atualizado] Menu rotatório

Mensagem por JoaoVanBlizzard em Dom 09 Jun 2013, 14:03

Eu dei uma olhada no seu menu rotatório,e gostei (e gosto ) bastante do seu trabalho que é sempre evolutivo, quanto ao seu menu, fiz alguns testes e funcionou bem até onde eu vi, o efeito gradiente está legal , só não posso opinar muito porque não sei que jogo você pretende fazer usando ele, mas a ideia é boa sim, só cuide as cores para ver se elas combinarão com seu jogo, a unica sugestão que eu te dou é no menu de sair do jogo que você colocou invertido, ele deveria vir com a função não (X) na parte de cima por que essa é uma função que quem joga usará uma vez só, e evita de sair do jogo por engano, foi a unica coisa que eu vi que da para melhorar, fora isso as outras funções funcionam bem, boa sorte com seu jogo. pretende fazer outro jogo de tanques ninjas, se for, poderia ter umas Pizzas para carregar a vida né xD.

JoaoVanBlizzard

Ranking : Nota B
Número de Mensagens : 1925
Idade : 38
Data de inscrição : 04/03/2012
Notas recebidas : B+B
Reputação : 144
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: [Atualizado] Menu rotatório

Mensagem por LightSpeedy em Dom 09 Jun 2013, 14:41

wal que sistema incrivel vc pode por uma GMK eu lhe dou mil creditos com letras grandes!se eu fizer um jogo com ela!

LightSpeedy

Ranking : Nota C
Número de Mensagens : 354
Data de inscrição : 24/04/2013
Notas recebidas : C
Reputação : 40
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Atualizado] Menu rotatório

Mensagem por Supersonic822 em Dom 09 Jun 2013, 14:56

Bota o download do GMK, ficou muito bom cara Happy

Supersonic822

Número de Mensagens : 19
Data de inscrição : 12/03/2013
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Atualizado] Menu rotatório

Mensagem por NPH em Dom 09 Jun 2013, 21:20

Ainda estou adicionando comandos a ele, é só para testes por enquanto...
Valeu a quem testou e aprovou o mesmo.

NPH

Ranking : Nota B
Número de Mensagens : 452
Idade : 22
Data de inscrição : 28/11/2010
Notas recebidas : B
Reputação : 32
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Atualizado] Menu rotatório

Mensagem por saim em Dom 09 Jun 2013, 21:48

Muito bom!

Sugiro permitir rodar por completo. Ele parece estar limitado entre as opções 0-n. Se você usar (opção+1) mod nOpções, isso se resolve. Pra não girar pro lado errado, você pode usar a seta que foi pressionada.

Não consegui imaginar porque o limite é de 6 opções. Geometria?

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: [Atualizado] Menu rotatório

Mensagem por NPH em Seg 10 Jun 2013, 18:37

saim escreveu:Não consegui imaginar porque o limite é de 6 opções. Geometria?
Não, é por causa da programação mesmo...
Para se ter uma ideia de quantas linhas de código esse menu usa, vou postar abaixo quantas linhas cada evento dele tem:

[Create] 65 linhas
[Step A] 124 linhas
[Step B] 112 linhas
[Draw] 38 linhas

Ou seja: [339] linhas no total em apenas um objeto.
Por isso as 7 horas para montá-lo por completo, e ainda acho que terá mais linhas por vir.
Bom, o importante é que eu estou aprendendo mais e mais a programar no Game Maker.
Valeu pelo comentário!

[EDIT]

O menu Foi atualizado e seguindo uma sugestão do usuário "JoaoVanBlizzard":
JoaoVanBlizzard escreveu:...a unica sugestão que eu te dou é no menu de sair do jogo que você colocou invertido, ele deveria vir com a função não (X) na parte de cima por que essa é uma função que quem joga usará uma vez só, e evita de sair do jogo por engano, foi a unica coisa que eu vi que da para melhorar...
Valeu JoaoVanBlizzard, foi muito útil.


Última edição por PHProductions em Seg 10 Jun 2013, 18:37, editado 1 vez(es) (Razão : agradecer um usuário...)

NPH

Ranking : Nota B
Número de Mensagens : 452
Idade : 22
Data de inscrição : 28/11/2010
Notas recebidas : B
Reputação : 32
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Atualizado] Menu rotatório

Mensagem por saim em Seg 17 Jun 2013, 00:53

PHProductions escreveu:
saim escreveu:Não consegui imaginar porque o limite é de 6 opções. Geometria?
[339] linhas no total em apenas um objeto.
Por isso as 7 horas para montá-lo por completo, e ainda acho que terá mais linhas por vir.


Acho que está na hora de rever sua forma de programar. Realmente me parece um número muito grande de linhas pra uma tarefa relativamente simples. Não estou menosprezando seu menu, ele é muito bacana, mas é um efeito que dá pra conseguir com menos esforço, se você souber indexar itens. Veja meu objeto-roleta, que faz mais ou menos a mesma coisa (embora com menos efeitos legais e um controle diferente). Ele está na minha engine de controles adaptados pra touch, então é open-source. Usei 151 linhas, com direito a comentários e cabeçalhos do "object info":

Spoiler:
Information about object: objRoletaSprite: sprRoleta
Solid: false
Visible: true
Depth: -3
Persistent: false
Parent:
Mask:

Create Event:
execute code:

image_angle = 0; //ângulo da imagem
angSpd = 0; // velocidade angular
angRef = 0; //ângulo de referência pra giro
roll = false;
drag = false;

decay = 0.5; //taxa de decaimento de velocidade angular
angRes = -45; //ângulo do resultado

valor = 0;
valorAnterior = valor;
nValores = 4;
angValor = 360 / nValores;
var i;
for(i = 0; i < nValores; i += 1){
angC[i] = (i + 0.5) * angValor + angRes;
}
image_angle = angC[0];

scale = 1; //escala em x e em y
scaMax = 1.2; //escala máxima
scaDelta = scaMax - 1; // diferença entre a máxima e a mínima
scaRef = 0; //efetivamente calculado ao largar o mouse, o quanto a escala deve diminuir
scaDecay = 0.05; // decaimento mínimo da escala (exceto quando solto já no ponto)

event_perform(ev_other, ev_user0);

Step Event:
execute code:

if (roll == true){ //se está rodando
var parou;
parou = false; // se parou NESSE step
if (drag == true) { //se está sendo controlado pelo jogador
var newAng;
newAng = point_direction(x, y, mouse_x, mouse_y); //direção atual do mouse
angSpd = ((((newAng - angRef) mod 360) + 540) mod 360) - 180; //diferença entre atual e anterior
image_angle += angSpd; //acompanha a diferença
angRef = newAng; //atualiza a referência
}
else { //se o jogador soltou, mas ainda está rolando
image_angle = (image_angle + angSpd + 360) mod 360; //mantém o giro e mantém entre 0 e 360
// fricção angular
if (angSpd > 0){
angSpd = max(angSpd - decay, 0);
}
if (angSpd < 0){
angSpd = min(angSpd + decay, 0);
}

if (scaRef != 0){ //se tem velocidade pra ser proporcional
scale = 1 + angSpd / scaRef * scaDelta;
}
else{
scale = max(1, scale - scaDecay);
}

if (abs(angSpd) <= decay){ //se a velocidade caiu demais, vai lentamente pra uma posição padrão
parou = true;
var newAng;
newAng = sign(((((angC[valor] - image_angle) mod 360) + 540) mod 360) - 180); //lado pra rodar
image_angle += newAng * decay; //velocidade pra rodar
if (abs(((((image_angle - angC[valor]) mod 360) + 540) mod 360) - 180) <= decay){ //se chegou na posição
roll = false; //para de rodar
scale = 1;
}
}

image_xscale = scale; image_yscale = scale;

}
valor = ((image_angle - angRes) div angValor) mod nValores; //se está rodando, o valor tem que ser atualizado
if (parou && valorAnterior != valor){
valorAnterior = valor;
event_perform(ev_other, ev_user0);
}
}

Mouse Event for Left Pressed:
execute code:

drag = true; //arrastando
roll = true; //rolando
angRef = point_direction(x, y, mouse_x, mouse_y); //referência pro próximo step
scale = scaMax; //escala em x e y
image_xscale = scale; image_yscale = scale;

Mouse Event for Glob Left Released:
execute code:

if (drag == true){
drag = false; //para de arrastar
scaRef = angSpd; //referência pra escala, proporcional ao giro
}

Other Event: User Defined 0:
execute code:

with(objControleParent){
instance_destroy();
}
controle[0] = 0;
controle[1] = 0;

switch(valor){
case 0: {
instance_create(0, 0, objControleJoy);
}; break
case 1: {
instance_create(0, 0, objControleBotoes);
}; break
case 2: {
instance_create(0, 0, objAcelerometro);
}; break
case 3: {
instance_create(0, 0, objControleBot3P);
}; break
}

Draw Event:
execute code:

// draw_line_color(x, y, x + lengthdir_x(110, angRes), y + lengthdir_y(110, angRes), $ff0000, $ff0000);
draw_sprite_ext(sprite_index, image_index, x, y, image_xscale, image_yscale, image_angle, image_blend, image_alpha);
/*
debug
var i; i = 20;
draw_text(20, i, "angRef: " + string(angRef)); i += 20;
draw_text(20, i, "image_angle: " + string(image_angle)); i += 20;
draw_text(20, i, "angSpd: " + string(angSpd)); i += 20;
draw_text(20, i, "resultado: " + string(valor + 1)); i += 20;
draw_text(20, i, "angC: " + string(angC[valor])); i += 20;
draw_text(20, i, "roll: " + string(roll)); i += 20;*/

Claro que não é a mesma coisa. Não pretendo comparar os dois objetos, apenas mostrar uma forma diferente de programar, mais genérica.

Agora... quanto às horas de trabalho, a coisa varia. Nessa roleta, eu devo ter gasto menos tempo. Umas 3 a 4 horas, + o tempo de fazer a sprite (eu demoro muito pra desenhar, mesmo coisas simples). Mas pra aprender a programar assim, usando mod, geometria, prevendo problemas... devo ter gasto uns 2 dias. De trabalho. Sem contar as horas de sono, horas sem estudar, horas fazendo outras coisas. Foram 2 dias espalhados ao longo de, digamos, um ano.

Eu ainda faço um tutorial a respeito de indexação... tudo que tem id pode ser indexado e jogado em arrays. Tudo. Objetos, instâncias, paths, sons, timelines, constantes, eventos.
E até scripts.
Porque eu deixei uma linha separada pra citar scripts? O que acontece no seu menu quando você aperta "enter"?

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: [Atualizado] Menu rotatório

Mensagem por NPH em Seg 17 Jun 2013, 11:34

Saim, cara! Se eu tivesse uma noção de como se usar arrays, até valeria seu comentário menosprezando o meu menu, mas eu não sei usar esse tipo de programação no GM, sempre que eu tento dá erros fatais, o que me fez desistir definitivamente de usar arrays em meus jogos. Quanto ao tempo, ele foi feito em apenas 7 horas. Menos de um dia.
Se você pudesse me ensinar a usar arrays, pois eu não tenho nem noção de como se usa isso.
Bom, obrigado por ter comentado e esqueci de avisar ao pessoal que o menu está desatualizado e que vou postar uma atualização hoje a noite.

NPH

Ranking : Nota B
Número de Mensagens : 452
Idade : 22
Data de inscrição : 28/11/2010
Notas recebidas : B
Reputação : 32
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Atualizado] Menu rotatório

Mensagem por saim em Seg 17 Jun 2013, 13:59

Velho, não foi minha intenção menosprezar seu menu... mais uma vez, ele está muito bacana! É o seu jeito de programar que pode melhorar. Não tem nada de errado, só pode melhorar.
Existe um tutorial a respeito de arrays na minha assinatura. Talvez os links dele estejam desatualizados, mas o tutorial deveria ser suficiente, por si só.
Arrays definitivamente facilitam a programação.
 
Arrays não são mais do que conjuntos de variáveis. Deixa eu fazer uma analogia, aqui... pense num armário horizontal, com quantas portas você quiser. Ele é modulado, então você pode colocar mais e mais portas. A princípio, a quantidade de portas que você pode colocar é infinita, você só precisa colocar uma plaquinha com um número em cada porta. Na primeira porta, o número "0", na segunda, o número "1", e assim por diante.
porta[0]; porta[1]; e assim por diante.
Em cada porta, você coloca um papel com algo escrito. Um valor. Se te parece um desperdício de armário, pense em armários pequenininhos. Ou papéis grandes.
Código:
porta[0] := 12;
porta[1] := obj_player;
porta[2] := script_sair_do_jogo;
porta[3] := "essa array não serve pra nada";
Pronto. Agora, se você quiser desenhar o texto que está na porta[3], você pode usar
Código:
draw_text(x, y, porta[3]);
É o mesmo que escrever
Código:
texto := "essa array não serve pra nada";
draw_text(x, y, texto);
É uma variável, como outra qualquer. A diferença é que você usa o índice (o número da porta) pra definir qual variável você quer. E você não precisa escrever o VALOR do índice. Esse valor pode ser calculado. Por exemplo:
Código:
texto[0] := "primeiro texto";
texto[1] := "segundo";
texto[2] := "tá ficando chato";
texto[3] := "já deu";
for (i := 0; i < 4; i += 1){
draw_text(x, y + 20 * i, texto[i]);
}
 
 
Pratique arrays. Em pouco tempo você vai se perguntar como era possível programar sem elas.


Última edição por saim em Seg 17 Jun 2013, 14:59, editado 1 vez(es)

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: [Atualizado] Menu rotatório

Mensagem por NPH em Seg 17 Jun 2013, 14:03

Valeu, vou ver se consigo programar alguma coisa com a sua explicação...

NPH

Ranking : Nota B
Número de Mensagens : 452
Idade : 22
Data de inscrição : 28/11/2010
Notas recebidas : B
Reputação : 32
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Atualizado] Menu rotatório

Mensagem por Conteúdo patrocinado Hoje à(s) 07:40


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