GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Retorno da GMBR!!!
por theguitarmester Ter 19 Mar 2024, 22:38

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16

» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05

» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55

» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39

» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28

» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01


[Resolvido] Códigos anulando outro!?

3 participantes

Ir para baixo

[Resolvido] Códigos anulando outro!? Empty [Resolvido] Códigos anulando outro!?

Mensagem por moisesBR Ter 10 Abr 2012, 23:35

Pretendo, colocar ínumeros comandos para o player, mas reparei que ao inserir comandos, comuns, em execuçao, alguns quase passaram despercebidos! Somente o primeiro comando é reconhecido!?

Geralmente eu estava usando isto:
Código:
if (keyboard_check(vk_right)){hspeed = 5 }
    else{if (keyboard_check(vk_left)){hspeed = -5}
        else{if (keyboard_check(vk_up)){vspeed = -5}
            else{if (keyboard_check(vk_down)){vspeed = 5}
                else{vspeed = 0 hspeed = 0}}}}
Ou isso:
Código:
if (keyboard_check(vk_right)){hspeed = 5 }
if (keyboard_check(vk_left)){hspeed = -5}
if (keyboard_check(vk_up)){vspeed = -5}
if (keyboard_check(vk_down)){vspeed = 5}
mas ao manter a tecla pressionada, outra nao responde:

Estou tentando também, criar uma IA de perseguiçao e fuga, em que desejo que; algumas IAs persiga o player, e ao mesmo tempo, fujam uma das outras, enquanto outras fujam de todas, e ao estar a certa distancia parassem! Consegui isso mas, tremem ao ficar entre outras. (dá para usar algo do tipo "avoid" em gml, para a IA fujir da situaçao? E no caso das perseguidoras, parar de tremer)

o code da IA:
Código:
situacao = "fugir"
begin
if distance_to_object(i)<20 {move_towards_point(i.x,i.y,-3)}
  else
    if distance_to_object(p)<20 {move_towards_point(p.x,p.y,-3)}
        else
          if distance_to_object(i2)<10 {move_towards_point(i2.x,i2.y,-3)}
              else{speed = 0}
end

situacao = "perseguir"
if instance_exists(p) {move_towards_point(p.x,p.y,3)}
if distance_to_object(i)<10 {move_towards_point(i.x,i.y,-3)}
if distance_to_object(p)>300 {speed = 0}
Aí voce diz; O que IA tem a ver com isso?
r:porque o problema está ocorrendo na IA!

O que ocorre?


Última edição por moisesBR em Sex 23 Nov 2012, 22:25, editado 2 vez(es) (Motivo da edição : Resolvido!)
moisesBR
moisesBR

Data de inscrição : 24/10/2009
Reputação : 15
Número de Mensagens : 885
Prêmios : [Resolvido] Códigos anulando outro!? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1


http://inprovise.blogspot.com/

Ir para o topo Ir para baixo

[Resolvido] Códigos anulando outro!? Empty Re: [Resolvido] Códigos anulando outro!?

Mensagem por GameMakerTutoriais Qua 11 Abr 2012, 02:43


moisesBR, a "falha" na resposta das teclas é porque ele executa o código das duas: enquanto uma soma 5, a outra subtrai 5 e no final dá 0 em velocidade. O código é executado na ordem em que você escreve.

Já essa execução só do primeiro código é por causa da quantidade de else's que você usou. O último comando só vai ser executado se todas as condições anteriores tiverem sido "else". Se a primeira condição for atendida, as outras não serão.

Quando você usa "keyboard_check()", ela vai retornar um valor 1 (true) ou 0 (false) dizendo o estado da tecla. Tem um jeito bem prático de fazer essa movimentação usando esse retorno de 0 e 1 e multiplicando pela velocidade:

Código:

hspeed = (keyboard_check(vk_right) - keyboard_check(vk_left)) * 5;
vspeed = (keyboard_check(vk_down) - keyboard_check(vk_up)) * 5;

Com isso o objeto também vai "andar" nas diagonais.

Nessas duas linha abaixo, a sua intenção foi definir um valor pra variável "situacao"? Pelo modo que o código tá montado, a impressão que eu tive foi que o move_towards seria feito de acordo com o valor dela... Nesse caso, teria faltado um "if" e um "{}" pra montar o bloco do código.

Código:
situacao = "fugir"
situacao = "perseguir"

Às vezes é difícil falar o que fazer ou não fazer na IA em código, porque depende de como o jogo foi feito. Eu tentei criar uma solução aqui de acordo com o que eu consegui entender vendo seu código. Veja se ela vai funcionar:



Já essa "tremidinha" da move_towards foi discutida nesse tópico abaixo. Tem a solução que o saim postou lá:

https://gmbr.forumeiros.com/t21809-resolvidoduvida-com-collision_point

Abraços!
avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Resolvido] Códigos anulando outro!? Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Códigos anulando outro!? Empty Re: [Resolvido] Códigos anulando outro!?

Mensagem por saim Qua 11 Abr 2012, 08:47

Acho que a tremidinha acontece por causa das distâncias. Num step, o objeto se move pra longe do objeto 'A', em direção ao objeto 'B'. No step seguinte, já tem uma distância suficiente pra ignorar o objeto 'A' e deve, então, fugir do objeto 'B' EM DIREÇÃO AO OBJETO 'A'. Com isso acontecendo 30 vezes por segundo, o objeto pira.
Pra visualizar melhor a situação, experimente desenhar círculos coloridos em volta dos objetos envolvidos. É uma forma de debug pra quando o erro não é em programação, mas em jogabilidade. Essa visualização, pelo menos mental, é importante pra entender o que vou descrever a seguir.

Não sei se existe solução simples pra esse caso. Uma alterntiva seria fazer a velocidade da fuga depender da distância do objeto, quanto mais perto, mais rápido.
Uma elaboração dessa primeira solução seria criar um vetor pra indicar a direção a fugir. Cada objeto, em função da distância, adiciona um vetor (uma grandeza com direção e magnitude, enfim, uma setinha com tamanho variável) e somam-se os vetores pra definir a direção da fuga. Ignora-se o tamanho do vetor resultante e move-se em velocidade constante na direção indicada.
De qualquer forma, não se deve fugir de um OU outro. Deve-se fugir de todo mundo ao mesmo tempo.

Sim, o código vai ficar meio grandinho. Deixa eu ver como eu faria...
Código:
var queroFugir, queroSeguir, i;//é importante que essas variáveis sejam "var"
var nFugir, nSeguir, magnitude, direção; //essas são "var" só pra economizar memória
i = 0;
resultante = 0;
with(cadaUmDosObjetosQueEuQueroFugir){ //podem ser vários "with"
if (distância < umValorPréDefinido){
queroFugir[i] = id;
i += 1;
}}
nFugiir = i; //número de instâncias a fugir
i = 0;
with(cadaUmDosObjetosQueEuQueroSeguir){
if (distância < outroValorPréDefinido){
queroSeguir[i] = id;
i += 1;
}}
nSeguir = i; //número de instâncias a seguir
for(i = 0; i < nFugir; i += 1){
magnitude = umValorPréDefinido - (distância entre os objetos);
direção = direção do objeto pra mim;
resultante += magnitude * direção; //isso é uma gambiarra, explico fora do código
}
for(i = 0; i < nSeguir; i += 1){
magnitude = outroValorPréDefinido - (distância entre os objetos);
direção = direção de eu pro objeto;
resultante += magnitude * direção; //parte da gambiarra acima, mesma explicação
}
resultante /= (nSeguir + nFugir);
direction = resultante;
Bom, se deu pra entender essa bagunça, o que eu fiz foi levar todo mundo em conta e calcular uma direção resultante. A gambiarra que fiquei de explicar foi o seguinte: ao invés de calcular uma resultante em x, outra em y, e somar tudo, achei que multiplicar o vator pela direção e dividir pelo número de vetores pode resultar numa média ponderada. Se falhar, o cálculo das resultantes em (x, y) deve funcionar (a direction deverá ser point_direction(0, 0, resultanteEmX, resultanteEmY))
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido] Códigos anulando outro!? Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Códigos anulando outro!? Empty Re: [Resolvido] Códigos anulando outro!?

Mensagem por moisesBR Qua 11 Abr 2012, 11:11

-consegui fazer a IA seguir e fugir.

Deixa eu tentar explicar melhor:
Quero que algumas (serao várias (mesmo objeto?)) IAs tanto as que seguem ou que fogem, se mantenham a certa distancia tanto do player, como entre si!

Quando eu coloquei a variável situacao = "perseguir", queria apenas como marcador tipo, quando a IA estivesse em tal situaçao, e algo ocorresse; (proximidade, distancia), ela assumiria outra situaçao e vice-versa.

Eu queria que a IA fujona (portugol?):
Se está perto demais, entao sai de perto corre! mas se (esta longe) entao pare, ataque, zombe, faça careta, atire...
Já a IA perseguidora, é exatamente o contrario:
Se esta longe, entao aproxime e pare, ataque, zombe, faça careta, atire...! mas se, está perto demais sai de cima!

Queria tambem entender a diferença de formataçao e os motivos dos erros:
3 exemplos:
Queria entrar em algum concurso com esta, mas... Quer saber? É esta!
Download:
http://www.4shared.com/rar/qabUyBbI/IA_Seguir_e_fugir_do_player_co.html?

Alguem sabe como colocar download do 4shared aqui sem ir para o Adfly?

Ninja, valeu! Os codes de movimento resolveu! Dá pra acrescentar comandos tipo direcao=1, sprite e etc? O outro já nao entendi muito bem... funcionou, mas apenas para a perseguiçao. Estou estudando o código e tentando entende-lo! Por isso no down acima, coloquei o que eu fiz antes que funcionou, mas com os erros.
moisesBR
moisesBR

Data de inscrição : 24/10/2009
Reputação : 15
Número de Mensagens : 885
Prêmios : [Resolvido] Códigos anulando outro!? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1


http://inprovise.blogspot.com/

Ir para o topo Ir para baixo

[Resolvido] Códigos anulando outro!? Empty Re: [Resolvido] Códigos anulando outro!?

Mensagem por saim Qua 11 Abr 2012, 12:24

Diferença entre os formatos
1 e 2: Nenhuma
1-2 e 3: Nos primeiros casos, o código verifica cada uma das declarações "if" e, se todas forem verdadeiras, executas todas elas.
Se a execução significa definir o valor de uma variável, essa variável pode ser definida várias vezes
No terceiro caso, o código vai procurando alguma declaração verdadeira e pára assim que encontra ela, executando o que estiver dentro dela.

Por exemplo, se estiver chovendo, você define vspeed como "+5", se estiver ventando, como "-5". Note que os eventos não estão relacionados, pode ocorrer só um, ambos ou nenhum. Agora, vejamos o comportamento dos seus códigos:

Nos primeiros casos:
se chove { vspeed = 5}
se venta { vspeed = -5}
se estiver chovendo e ventando, o valor de vspeed final será -5. Não é porque não está chovendo, é porque o código passa pela chuva, define vspeed como 5, depois olha o vento e muda o valor da variável.

No último caso:
se chove { vspeed = 5}
senão, se venta {vspeed = -5}
Agora, o código faz o seguinte: se esitver chovendo, ele define vspeed pro valor de 5 e fim. Não quer mais saber do "senão". Ele diz "hm, se está chovendo... opa, está chovendo, deixa eu obedecer aqui! Pronto, que mais? Senão... ah, quero nem saber, não é o caso!". Aí, se não estiver chovendo - se não estiver chovendo - o código prossegue e verifica se está ventando e, se estiver, define vspeed como -5.

Nos dois casos, se não estiver chovendo nem ventando, vspeed permanece como estava.

PS: Pra IA, o que você está fazendo é uma versão da máquina de estados finitos. Não é um conceito novo, sugiro dar uma lida a respeito, pode esclarecer um pouco as coisas.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido] Códigos anulando outro!? Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Códigos anulando outro!? Empty Re: [Resolvido] Códigos anulando outro!?

Mensagem por GameMakerTutoriais Qui 12 Abr 2012, 23:33

Cara, bem pensado! Se um objeto afasta de um e volta em direção ao outro ele vai ficar pulando mesmo... IA é parte mais difícil mas é mais legal de programar também. Essa ideia de calcular um ângulo anternativo pra fuga é excelente!

Tem um esqueminha muito doido de "atração" que também dá pra usar! É quase o mesmo raciocínio que é usado nesse sisteminha de partículas do GM! Você calcula o quanto a velocidade vertical ou horizontal do objeto vai sofrer essa "atração" de acordo com a distância em que ele tá de cada "ponto de atração" (no caso, cada instância)

Daí nem precisa calcular a direção! De acordo com vspeed e hspeed ele já se movimenta na direção certa! Eu vou tentar fazer um exemplo aqui e dou um edit! Valeu!
avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Resolvido] Códigos anulando outro!? Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Códigos anulando outro!? Empty Re: [Resolvido] Códigos anulando outro!?

Mensagem por moisesBR Qui 12 Abr 2012, 23:46

Ok. Mas se nao for pedir muito, comente para que eu possa entender! Pode ser? ...
Só assim consigo entender e Aprender!
Nada-com-nada por exemplo:

X=e(a);y+1= 8-8*9//esse codigo é só um exemplo para mostrar o que faz: Nada.
moisesBR
moisesBR

Data de inscrição : 24/10/2009
Reputação : 15
Número de Mensagens : 885
Prêmios : [Resolvido] Códigos anulando outro!? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1


http://inprovise.blogspot.com/

Ir para o topo Ir para baixo

[Resolvido] Códigos anulando outro!? Empty Re: [Resolvido] Códigos anulando outro!?

Mensagem por GameMakerTutoriais Sex 13 Abr 2012, 01:59

Foi mal cara, eu não comentei nada lá em cima. É mau vício. Sad
Mas no exemplo aqui eu comentei tudo:

http://www.4shared.com/file/i9F6rdrG/IA_ATTRACTOR.html

Ficou bem simplesão pq eu fiz rápido só pra mostrar a minha ideia! O negócio é usar mais recursos pra ficar bem caprichado, com alarm, trigger, timeline, etc, porque nesse projeto aí eu só usei um script.

Valeu!

Talvez eu vá demorar a responder! Depois do dia 16 eu só devo entrar no fórum em julho. Sad Falou!
avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Resolvido] Códigos anulando outro!? Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Resolvido] Códigos anulando outro!? Empty Re: [Resolvido] Códigos anulando outro!?

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos