Conectar-se
Quem está conectado
26 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 26 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ir em baixo
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 30/06/2010
Número de Mensagens : 642
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 21

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Preciso de ajuda com armas e ângulos

em Qua 06 Jun 2018, 17:40
[EDIT] Vou avisar no começo pois esqueci e é importante, a versão que uso é Game Maker 8.0

Olá pessoal, estou com um problema que já fiz de tudo pra resolver e não consegui chegar em nada, realmente estou confuso em relação a isso, procurei algumas engines e tutoriais aqui no forum mas tudo que eu encontrei está fora do ar já, enfim, estou fazendo um jogo de tiro onde o personagem fica PARADO, nele tem dois braços, um de cada lado, que giram conforme a posição do mouse, essa parte da programação já fiz, não é com isso que preciso de ajuda, primeiro vou colocar uma imagem e em baixo a legenda com meus problemas.



Sobre Arma 1 e Arma 2: eu estou tentando fazer com que toda vez que eu realize o clique global, saia um tiro de cada arma, um por vez, com um certo delay, mas preciso de um código que saia primeiro de uma arma e depois da outra, na minha cabeça parece tão simples esse código mas de jeito nenhum eu to conseguindo fazer com que saia um de cada vez, alguém poderia me ajudar com isso?

Sobre pontos vermelhos na ponta de cada arma: também procurei e não achei nada relacionado, os pontos de origem tão em X=0 e Y=6 (o Y é a metade da sprite), esses pontos de origem é o que fazem o ângulo que o objeto ta em relação ao mouse ficar mais bonito, o problema é que na hora de sair o tiro, ele sai todo bugado, acho que talvez pelo fato do image_angle, não sei, eu gostaria de fazer com que o tiro saísse precisamente do ponto vermelho, independente do ângulo que ele tá, é possível fazer isso sem alterar a origem?

Obrigado pela atenção de quem leu até aqui. Razz
avatar
Data de inscrição : 27/11/2012
Número de Mensagens : 249
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 45
Ver perfil do usuário

Re: Preciso de ajuda com armas e ângulos

em Qua 06 Jun 2018, 19:40
A 1° questão você pode resolver usando uma simples variável, aliás, a massiva maioria das situações podem ser resumidas a controlar estados de um valor/etc.

No caso é só iniciar com um valor e então ficar alternando a cada tiro, ex:
armaMao = 1; // mão direita

Na ação do tiro
if armaMao == 1 {
armaMao = 2; // mão esquerda
--código do disparo no lado direito--
} else {
armaMao = 1; // mão direita
--código do disparo no lado esquerdo--
}

Já em relação a "ancoragem" dos tiros, as funções lengthdir_x e lengthdir_y servem pra estabelecer um vetor com base no ângulo e distância.

O valor do ângulo você pode obter usando a mesma mecânica que faz o braço apontar pro mouse. A distância é o comprimento do braço (ou a distância entre o eixo de rotação do mesmo e o local em que você quer que a arma fique), em pixels.

Digamos que esse comprimento seja 32px, então a ancoragem das armas seria:
Evento STEP
arma_esq_x = (x_do_eixo_do_braço_esq + lengthdir_x(32, angulo_dos_braços));
arma_esq_y = (y_do_eixo_do_braço_esq + lengthdir_y(32, angulo_dos_braços));
arma_dir_x = (x_do_eixo_do_braço_dir + lengthdir_x(32, angulo_dos_braços));
arma_dir_y = (y_do_eixo_do_braço_dir + lengthdir_y(32, angulo_dos_braços));

Dai é só usar essas coordenadas na ação de criação dos objetos disparados, ex:
Evento do tiro
if armaMao == 1 {
armaMao = 2; // mão esquerda
instance_create(arma_dir_x, arma_dir_y, objeto_tiro);
} else {
armaMao = 1; // mão direita
instance_create(arma_esq_x, arma_esq_y, objeto_tiro);
}

E já antecipando uma possível outra dúvida sua... pra fazer o tiro ir na referida direção, armazene o ID da instância pra facilitar, ex:
Evento do tiro
var _id; // variável temporária
if armaMao == 1 {
armaMao = 2; // mão esquerda
_id = instance_create(arma_dir_x, arma_dir_y, objeto_tiro);
} else {
armaMao = 1; // mão direita
_id = instance_create(arma_esq_x, arma_esq_y, objeto_tiro);
}

_id.direction = valor_do_angulo_dos_braços;

Basta que o objeto da bala possua um valor de "speed" no create pra que o objeto se mova usando esses atributos nativos do GM (direction e speed).
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 30/06/2010
Número de Mensagens : 642
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 21

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Preciso de ajuda com armas e ângulos

em Qua 06 Jun 2018, 23:09
Sobre os tiros, funcionou certinho, mas o segundo eu não entendi muito bem, bem, eu tenho 2 objetos que são os braços, neles eu só tenho o código de ângulo, e eu tenho um objeto controlador que checa o clique, onde eu coloquei o primeiro código que você me ajudou ali, mas não entendi muito bem onde empregar o segundo código, específicamente aquele step ali, o arma_esq_x(etc), são variaveis? e o x_do eixo[...] seria o que? e o angulo_dos_braços? não entendi muito bem, se puder ser mais claro agradeço.
avatar
Data de inscrição : 27/11/2012
Número de Mensagens : 249
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 45
Ver perfil do usuário

Re: Preciso de ajuda com armas e ângulos

em Qui 07 Jun 2018, 09:46
Sim, você precisa de variáveis pra armazenar aqueles pontos onde estarão ancoradas as armas, e esses pontos devem ser "atualizados" continuamente, dai o evento STEP.

o "eixo" dos braços é a coordenada onde eles giram, ou seja, o ponto x e y em que esses objetos estão na room.

Suponhamos que seu boneco esteja no centro inferior da tela e que esta tenha 640px por 480px. Os braços estariam em algo como 300,400 (esq) e 340,400 (dir).

No evento STEP o lengthdir estaria calculando a rotação dessas coordenadas, ex:
(obs. pra efeito vamos considerar 16px de comprimento no braço)

arma_esq_x = (300 + lengthdir_x(16, sua_var_de_angulo));
arma_esq_y = (400 + lengthdir_y(16, sua_var_de_angulo));

arma_dir_x = (340 + lengthdir_x(16, sua_var_de_angulo));
arma_dir_y = (400 + lengthdir_y(16, sua_var_de_angulo));

Se você está trabalhando com um objeto controlador, então nos objetos das armas basta pegar essas variáveis, ex:

Evento STEP da arma esquerda
x = nome_do_objeto_controlador.arma_esq_x;
y = nome_do_objeto_controlador.arma_esq_y;
image_angle = nome_do_objeto_controlador.sua_var_de_angulo;

Evento STEP da arma direita
x = nome_do_objeto_controlador.arma_dir_x;
y = nome_do_objeto_controlador.arma_dir_y;
image_angle = nome_do_objeto_controlador.sua_var_de_angulo;
avatar
Ranking : Sem avaliações
Data de inscrição : 01/06/2018
Número de Mensagens : 12
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0
Ver perfil do usuário

Re: Preciso de ajuda com armas e ângulos

em Sex 08 Jun 2018, 08:06
lengthdir é uma função tão mágica.

O Step Event fez dois vídeos MUITO legais justamente sobre ela (curiosamente um deles é muito similar ao que você quer, embora o outro seja mais divertido), os vídeos são em inglês (não sei se é um problema), mas são muitos legais.

Link do canal dele (só tirar os espaços).
https:// www .youtube .com/channel/UCJeEe1CjKkblOqMVsBjumIA
Conteúdo patrocinado

Re: Preciso de ajuda com armas e ângulos

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