Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Inimigo atira
2 participantes
Página 1 de 1
Inimigo atira
opa tudo bom então ,eu quero fazer que se o meu obj player chegar a uma certa distancia do meu inimigo o meu inimigo vai atirar na direção em que meu player esta e depois que meu inimigo atiro uma vez ele só pode atirar novamente após um determinado tempo estou tentando fazer isso já faz 3 semanas e ate agora não consegui alguém pode por favor me ajudar?
Galinho- Games Ranking :
Data de inscrição : 22/11/2023
Reputação : 0
Número de Mensagens : 4
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Galinho gosta desta mensagem
Re: Inimigo atira
Olá, vou te dar um exemplo de como fazer!
Primeiro, adicione as seguintes variáveis ao seu objeto obj_inimigo para controlar o tempo entre os tiros:
Agora, no evento Step de obj_inimigo, adicione o seguinte código para verificar a distância entre o inimigo e o jogador, e atirar apenas quando o jogador estiver a uma certa distância:
Essa é a forma mais básica de criar um tiro, não cheguei a testar o código, mas em teoria é assim que funciona.
Você pode ajustar a velocidade do tiro, o recuo do tiro e a distância mínima que o inimigo vai começar a atirar no player, você deve substituir os nomes dos objetos do exemplo pelos nomes reais de cada objeto referente ao seu projeto.
Você deve adicionar o código `instance_destroy()` no obj_tiro no evento onde esse objeto sai da tela do jogo para que ele não fique vagando infinitamente pelo seu jogo e consumindo recursos.
Isso deve ser feito no evento em que o objeto tiro sai da view ou então no evento em que ele sai dos limites da sala do jogo.
Ou dependendo do seu jogo, ele pode ser destruído após percorrer uma determinada distância em píxeis desde o ponto em que foi criado.
Maiores informações sobre as funções usadas no exemplo:
point_distance()
point_direction()
irandom_range()
instance_create_layer()
Qualquer dúvida, não se hesite em perguntar!
Primeiro, adicione as seguintes variáveis ao seu objeto obj_inimigo para controlar o tempo entre os tiros:
- Código:
// Create Event de obj_inimigo
tempo_entre_tiros = 60; // 60 frames entre cada tiro
tempo_ate_proximo_tiro = 0;
distancia_maxima = 200; // Defina a distância máxima desejada
velocidade_tiro = 5; // Define a velocidade que o tiro vai sair
recuo_tiro = 5; // Define a variação do tiro, quanto maior mais ruim a mira do inimigo, se for 0 o inimigo vai atirar exatamente na direção do player no momento do tiro
Agora, no evento Step de obj_inimigo, adicione o seguinte código para verificar a distância entre o inimigo e o jogador, e atirar apenas quando o jogador estiver a uma certa distância:
- Código:
// Step Event de obj_inimigo
// Verifica se o jogador está a uma distância específica
if (point_distance(x, y, obj_player.x, obj_player.y) < distancia_maxima) {
// Verifica se já passou tempo suficiente para atirar novamente
if (tempo_ate_proximo_tiro <= 0) {
// Código para atirar
var recuo = irandom_range(-recuo_tiro, recuo_tiro); // Define um valor aleatorio entre -5 e 5 (que vai ser usado em graus para adicionar um recuo aleatorio na direção do tiro)
var inst = instance_create_layer(x, y, "Instances", obj_tiro); // Substitua obj_tiro pelo nome do seu objeto de tiro, substituir "Instances" pelo nome da layer que você está usando na sua room
inst.speed = velocidade_tiro; // Defini a velocidade da bala
inst.direction = point_direction(x, y, obj_player.x, obj_player.y) + recuo; // Define a direção do tiro
// Reseta o tempo até o próximo tiro
tempo_ate_proximo_tiro = tempo_entre_tiros;
}
}
// Reduz o tempo até o próximo tiro a cada frame
tempo_ate_proximo_tiro -= 1;
Essa é a forma mais básica de criar um tiro, não cheguei a testar o código, mas em teoria é assim que funciona.
Você pode ajustar a velocidade do tiro, o recuo do tiro e a distância mínima que o inimigo vai começar a atirar no player, você deve substituir os nomes dos objetos do exemplo pelos nomes reais de cada objeto referente ao seu projeto.
Você deve adicionar o código `instance_destroy()` no obj_tiro no evento onde esse objeto sai da tela do jogo para que ele não fique vagando infinitamente pelo seu jogo e consumindo recursos.
Isso deve ser feito no evento em que o objeto tiro sai da view ou então no evento em que ele sai dos limites da sala do jogo.
Ou dependendo do seu jogo, ele pode ser destruído após percorrer uma determinada distância em píxeis desde o ponto em que foi criado.
Maiores informações sobre as funções usadas no exemplo:
point_distance()
point_direction()
irandom_range()
instance_create_layer()
Qualquer dúvida, não se hesite em perguntar!
GabrielXavier- Games Ranking :
Notas recebidas : A
Data de inscrição : 25/02/2012
Reputação : 45
Número de Mensagens : 403
Prêmios :
x 0 x 1 x 0
x 0 x 1 x 1
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Galinho gosta desta mensagem
Re: Inimigo atira
GabrielXavier escreveu:Olá, vou te dar um exemplo de como fazer!
Primeiro, adicione as seguintes variáveis ao seu objeto obj_inimigo para controlar o tempo entre os tiros:
- Código:
// Create Event de obj_inimigo
tempo_entre_tiros = 60; // 60 frames entre cada tiro
tempo_ate_proximo_tiro = 0;
distancia_maxima = 200; // Defina a distância máxima desejada
velocidade_tiro = 5; // Define a velocidade que o tiro vai sair
recuo_tiro = 5; // Define a variação do tiro, quanto maior mais ruim a mira do inimigo, se for 0 o inimigo vai atirar exatamente na direção do player no momento do tiro
Agora, no evento Step de obj_inimigo, adicione o seguinte código para verificar a distância entre o inimigo e o jogador, e atirar apenas quando o jogador estiver a uma certa distância:
- Código:
// Step Event de obj_inimigo
// Verifica se o jogador está a uma distância específica
if (point_distance(x, y, obj_player.x, obj_player.y) < distancia_maxima) {
// Verifica se já passou tempo suficiente para atirar novamente
if (tempo_ate_proximo_tiro <= 0) {
// Código para atirar
var recuo = irandom_range(-recuo_tiro, recuo_tiro); // Define um valor aleatorio entre -5 e 5 (que vai ser usado em graus para adicionar um recuo aleatorio na direção do tiro)
var inst = instance_create_layer(x, y, "Instances", obj_tiro); // Substitua obj_tiro pelo nome do seu objeto de tiro, substituir "Instances" pelo nome da layer que você está usando na sua room
inst.speed = velocidade_tiro; // Defini a velocidade da bala
inst.direction = point_direction(x, y, obj_player.x, obj_player.y) + recuo; // Define a direção do tiro
// Reseta o tempo até o próximo tiro
tempo_ate_proximo_tiro = tempo_entre_tiros;
}
}
// Reduz o tempo até o próximo tiro a cada frame
tempo_ate_proximo_tiro -= 1;
Essa é a forma mais básica de criar um tiro, não cheguei a testar o código, mas em teoria é assim que funciona.
Você pode ajustar a velocidade do tiro, o recuo do tiro e a distância mínima que o inimigo vai começar a atirar no player, você deve substituir os nomes dos objetos do exemplo pelos nomes reais de cada objeto referente ao seu projeto.
Você deve adicionar o código `instance_destroy()` no obj_tiro no evento onde esse objeto sai da tela do jogo para que ele não fique vagando infinitamente pelo seu jogo e consumindo recursos.
Isso deve ser feito no evento em que o objeto tiro sai da view ou então no evento em que ele sai dos limites da sala do jogo.
Ou dependendo do seu jogo, ele pode ser destruído após percorrer uma determinada distância em píxeis desde o ponto em que foi criado.
Maiores informações sobre as funções usadas no exemplo:
point_distance()
point_direction()
irandom_range()
instance_create_layer()
Qualquer dúvida, não se hesite em perguntar!
oba muito obrigado ajudo demais serio mesmo, porém por algum motivo só funciona o primeiro tiro, tipo quando ele faz o primeiro tiro depois que passa o tempo necessário o outro tiro não sai, e o primeiro tiro também só sai se eu tiver já colocado o meu player na distancia do meu inimigo tipo se eu colocar o meu player fora da distancia em que ele atira se eu chegar na distancia que ele atira ele não atira, se poder me ajudar agradeço muito
Galinho- Games Ranking :
Data de inscrição : 22/11/2023
Reputação : 0
Número de Mensagens : 4
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Galinho gosta desta mensagem
Re: Inimigo atira
Sem ver o seu código não consigo te ajudar, pois pode depender de outros fatores do seu projeto.
Aqui está um exemplo que escrevi para te mostrar: EXEMPLO
Feito no GMS2.3, o player segue o mouse e a visão do inimigo é representada por um círculo vermelho, sempre que o player entra na visão do inimigo ele dispara contra o player, se limitando a uma vez a cada 60 quadros. No canto esquerdo imprimi algumas variáveis para ver os valores em tempo real.
Se não conseguir resolver e quiser upar seu projeto e me mandar por MP para analisar seu código estou à disposição!
Aqui está um exemplo que escrevi para te mostrar: EXEMPLO
Feito no GMS2.3, o player segue o mouse e a visão do inimigo é representada por um círculo vermelho, sempre que o player entra na visão do inimigo ele dispara contra o player, se limitando a uma vez a cada 60 quadros. No canto esquerdo imprimi algumas variáveis para ver os valores em tempo real.
Se não conseguir resolver e quiser upar seu projeto e me mandar por MP para analisar seu código estou à disposição!
GabrielXavier- Games Ranking :
Notas recebidas : A
Data de inscrição : 25/02/2012
Reputação : 45
Número de Mensagens : 403
Prêmios :
x 0 x 1 x 0
x 0 x 1 x 1
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Re: Inimigo atira
GabrielXavier escreveu:Sem ver o seu código não consigo te ajudar, pois pode depender de outros fatores do seu projeto.
Aqui está um exemplo que escrevi para te mostrar: EXEMPLO
Feito no GMS2.3, o player segue o mouse e a visão do inimigo é representada por um círculo vermelho, sempre que o player entra na visão do inimigo ele dispara contra o player, se limitando a uma vez a cada 60 quadros. No canto esquerdo imprimi algumas variáveis para ver os valores em tempo real.
Se não conseguir resolver e quiser upar seu projeto e me mandar por MP para analisar seu código estou à disposição!
opa tudo bom a única coisa que tem no meu inimigo e um sistema usando switch pra ele der a chance de fica parado ou correndo para ele ficar alterando de estado. Mandei o meu código aqui em baixo para você poder ver também mandei o obj pai do meu inimigo por que vá que seja ele eu acho que não mais nunca se sabe, se conseguir me ajudar agradeço eu já refis esses códigos tantas vezes que já do ficando meio confuso ,eu acho que fiz tudo errado ,eu também tentei ver o exemplo que você me deixou mais não sei como faço para ver só tem as pastas não entendi muito bem.
Código Criar:
// Create Event de obj_inimigo
tempo_entre_tiros = 10; // 60 frames entre cada tiro
tempo_ate_proximo_tiro = 0;
distancia_maxima = 200; // Defina a distância máxima desejada
velocidade_tiro = 5; // Define a velocidade que o tiro vai sair
recuo_tiro = 5; // Define a variação do tiro, quanto maior mais ruim a mira do inimigo, se for 0 o inimigo vai atirar exatamente na direção do player no momento do tiro
// Inherit the parent event
event_inherited();
//personalizando as variaveis
//ele vai decidir se ele pode anda para a direita ou para esquewrda
vel = choose(1, -1);
tempo_decidir_andar = room_speed;
estado = "idle"; //idle, run, power
muda_sprite = function(_sprite)
{
//checar se eu estou com a sprite certa
if (sprite_index != _sprite)
{
sprite_index = _sprite;
image_index = 0;
}
}
tempo_estado = room_speed * 5;
timer_estado = tempo_estado;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Código Etapa:
//se eu bater na parede, eu mudo de direçao
if (place_meeting(x + velh, y, obj_chao))
{
velh *= -1;
}
//se eu nao posso cair então quanto eu for cair eu mudo de direçaor
if (pode_cair == false)
{
if (place_meeting(x + (velh * 10), y + 1, obj_chao) == false)
{
//se eu nao posso cair e nao estou tocando no chão na minha frente
//então eu mudo de direçao
velh *= -1;
}
}
velv += grav;
switch(estado)
{
case "idle":
muda_sprite(spr_inimigo_idle_agua);
velh = 0;
//diminuindo o timer do estado
timer_estado --;
if (timer_estado <= 0)
{
estado = choose("run", "idle");
timer_estado = tempo_estado;
//garanto que se ele foi para o estado de run ele anda
if (estado == "run")
{
velh = choose(-vel, vel);
}
}
break;
case "run":
muda_sprite(spr_inimigo_run_agua);
image_xscale = sign(velh);
timer_estado --;
if (timer_estado <= 0)
{
estado = choose("run", "idle", "run");
timer_estado = tempo_estado;
}
break;
}
// Verifica se o jogador está a uma distância específica
if (point_distance(x, y, obj_player.x, obj_player.y) < distancia_maxima) {
// Verifica se já passou tempo suficiente para atirar novamente
if (tempo_ate_proximo_tiro <= 0) {
// Código para atirar
var recuo = irandom_range(-recuo_tiro, recuo_tiro);
var inst = instance_create_layer(x, y, "shoot", obj_shoot2)
inst.speed = velocidade_tiro;
inst.direction = point_direction(x, y, obj_player.x, obj_player.y) + recuo;
// Reseta o tempo até o próximo tiro
tempo_ate_proximo_tiro = tempo_entre_tiros;
}
}
// Reduz o tempo até o próximo tiro a cada frame
tempo_ate_proximo_tiro -= 1;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
OBJ PAI DO MEU INIMIGO
CREATE DELE:
velh = 0;
velv = 0;
vel = 3.5;
grav = .3;
ETAPA DELE:
/fazendo a colisão horizontal
//cehcando se eu estou colidindo com a parade
var _col = instance_place(x + velh, y, obj_chao);
//se eu colidi eu grudo em quem eu colidi
if (_col)
{
//cehcando se eu estou indo para a direita
if (velh > 0)
{
//grudando na parte esquerda da parede
x = _col.bbox_left + (x - bbox_right);
}
//cehcando se eu estou indo para a esquerda
if(velh < 0)
{
x = _col.bbox_right + (x - bbox_left);
}
//uma vez que eu colidi, nao importa o lado, eu paro
velh = 0;
}
x += velh;
var _col = instance_place(x, y + velv, obj_chao);
if (_col)
{
if (velv > 0)
{
//indo para baixo
y = _col.bbox_top + (y - bbox_bottom);
}
if ( velv < 0 )
{
//indo para cima
y = _col.bbox_bottom + (y - bbox_top);
}
velv = 0;
}
y += velv;
//fazendo a colisão horizontal
//cehcando se eu estou colidindo com a parade
var _coli = instance_place(x + velh, y, obj_barreira);
//se eu colidi eu grudo em quem eu colidi
if (_coli)
{
//cehcando se eu estou indo para a direita
if (velh > 0)
{
//grudando na parte esquerda da parede
x = _coli.bbox_left + (x - bbox_right);
}
//cehcando se eu estou indo para a esquerda
if(velh < 0)
{
x = _coli.bbox_right + (x - bbox_left);
}
//uma vez que eu colidi, nao importa o lado, eu paro
velh = 0;
}
Galinho- Games Ranking :
Data de inscrição : 22/11/2023
Reputação : 0
Número de Mensagens : 4
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Galinho gosta desta mensagem
Re: Inimigo atira
O código dessa forma ficou confuso até para eu entender, não consegui identificar o erro, a única coisa que parece estar errada ali é a função "event_inherited();", você deve declarar ela no início do evento na primeira linha de código e não após escrever algum trecho de código no evento, não sei se pode ser isso que esta causando o erro no seu projeto, mas tem chance de ser.
O projeto de exemplo que te mandei é um projeto completo, só você baixar a pasta inteira do link e abrir com o game maker que você vai ver o projeto, os códigos e se executar vai conseguir ver o exemplo rodando.
Manual: event_inherited();
O projeto de exemplo que te mandei é um projeto completo, só você baixar a pasta inteira do link e abrir com o game maker que você vai ver o projeto, os códigos e se executar vai conseguir ver o exemplo rodando.
Manual: event_inherited();
GabrielXavier- Games Ranking :
Notas recebidas : A
Data de inscrição : 25/02/2012
Reputação : 45
Número de Mensagens : 403
Prêmios :
x 0 x 1 x 0
x 0 x 1 x 1
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Galinho gosta desta mensagem
Re: Inimigo atira
GabrielXavier escreveu:O código dessa forma ficou confuso até para eu entender, não consegui identificar o erro, a única coisa que parece estar errada ali é a função "event_inherited();", você deve declarar ela no início do evento na primeira linha de código e não após escrever algum trecho de código no evento, não sei se pode ser isso que esta causando o erro no seu projeto, mas tem chance de ser.
O projeto de exemplo que te mandei é um projeto completo, só você baixar a pasta inteira do link e abrir com o game maker que você vai ver o projeto, os códigos e se executar vai conseguir ver o exemplo rodando.
Manual: event_inherited();
ok muito obg ajudo demais vó tentar arrumar o código e deixar ele menos confuso
Galinho- Games Ranking :
Data de inscrição : 22/11/2023
Reputação : 0
Número de Mensagens : 4
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker Studio 2.0
Galinho gosta desta mensagem
Tópicos semelhantes
» inimigo atira
» Inimigo atira no player
» [Resolvido] - [Engine ou tuto] Inimigo estático que atira flechas
» [resolvido]Como fazer o inimigo atira quando o play estiver perto dele
» Como Criar um inimigo no GM pro que quando mim ver atira
» Inimigo atira no player
» [Resolvido] - [Engine ou tuto] Inimigo estático que atira flechas
» [resolvido]Como fazer o inimigo atira quando o play estiver perto dele
» Como Criar um inimigo no GM pro que quando mim ver atira
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos