Entrar
Ú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
Página 1 de 1
[Resolvido] Códigos anulando outro!?
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:
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:
r:porque o problema está ocorrendo na IA!
O que ocorre?
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}}}}
- 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}
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}
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!)
Re: [Resolvido] Códigos anulando outro!?
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!
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido] Códigos anulando outro!?
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...
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;
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Resolvido] Códigos anulando outro!?
-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:
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.
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:
- formato1:
se algo = isso entao faça isso
se algo = isso entao faça isso
se algo = isso entao faça isso
formato2
começo
se algo = isso entao faça isso
se algo = isso entao faça isso
fim
formato3
começo
se algo = isso entao faça isso
else
se algo = isso entao faça isso
else
se algo = isso entao faça isso
fim
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.
Re: [Resolvido] Códigos anulando outro!?
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 - só 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.
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 - só 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- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Resolvido] Códigos anulando outro!?
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!
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!
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido] Códigos anulando outro!?
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.
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.
Re: [Resolvido] Códigos anulando outro!?
Foi mal cara, eu não comentei nada lá em cima. É mau vício.
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. Falou!
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. Falou!
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» [Resolvido] - Dois inimigos um atraz do outro e quando encontra o jogador ele fica batendo um no outro
» Destruir outro objeto , codigos
» [Resolvido] Códigos executados instantaneamente
» [RESOLVIDO] Problemas com codigos de falas!!!
» [Resolvido]onde eu boto os codigos?XD
» Destruir outro objeto , codigos
» [Resolvido] Códigos executados instantaneamente
» [RESOLVIDO] Problemas com codigos de falas!!!
» [Resolvido]onde eu boto os codigos?XD
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|