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

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

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

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

Como funciona está formula

em Qui 12 Jul 2012, 18:33
Eae pessoal, faz um tempo que eu não posto aqui, mas eu gostaria de saber, como funciona está formula, ela serve para que mesmo que o FPS de jogo esteja em 9999, o objeto se movimente em sua velocidade normal por exemplo...
Código:
valor*(60/max(fps,1))
Eu quero implementar isto em meu jogo, porém eu não sei como ela funciona, e saber isso vai ser muito importante para mim, e para meus projetos, se alguém puder me explicar direitinho cada coisinha ali, eu vou ficar muito agradecido ( Inclusive para que serve a função "max")

Obrigado,
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 30/07/2011
Número de Mensagens : 928
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 1
Ver perfil do usuáriohttp://luizpontes.tk/

Re: Como funciona está formula

em Qui 12 Jul 2012, 18:52
Funkbuster escreveu:para que mesmo que o FPS de jogo esteja em 9999, o objeto se movimente em sua velocidade normal por exemplo...
Se for pra isto, estão o room_speed basicamente já está fazendo isto.
Funkbuster escreveu:( Inclusive para que serve a função "max")
A função "max" retorna o máximo dos valores (o maior)
Esta fórmula, de certa forma, não serve pra nada e nem funciona pois não é um "assignment", mas acho que se você colocar um "room_speed=" no começo do código, no lugar de valor por 60, e trocar todos os "60" pelo valor da room_speed que você quer, acho que funciona.
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Qui 12 Jul 2012, 18:56
Funciona sim, perfeitamente por sinal, se quiser testar, faça um objeto com esse código no step :

Código:
if keyboard_check(vk_left) then x-=5*(60/max(fps,1))
if keyboard_check(vk_right) then x+=5*(60/max(fps,1))
if keyboard_check(vk_up) then y-=5*(60/max(fps,1))
if keyboard_check(vk_down) then y+=5*(60/max(fps,1))

//Aperte F para escolher o FPS
if keyboard_check(ord('F')) then room_speed = get_integer("room_speed:",room_speed);
Teste, tenho certeza de que entenderá melhor a minha pergunta...
avatar
Ranking : Sem avaliações
Notas recebidas : B
Data de inscrição : 28/02/2012
Número de Mensagens : 1908
Insígnias de JAM :

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

Prêmios
   : 2
   : 2
   : 1
Ver perfil do usuáriohttp://guitarmester.no.comunidades.net/index.php?pagina=19362978

Re: Como funciona está formula

em Qui 12 Jul 2012, 19:11
A função "max" retorna o máximo dos valores (o maior)
Exemplo:
valor1=15 valor2=35
valor3=max(valor1*2,valor2+) // retorna o valor máximo, que aqui será o valor2(que é 35)+5 e o valor3 será 40 ; o 1 é 30.
agora se o valor1 for = a 25 o valor do 3 será 50, porque é o valor maior.
_______________________
eu acho que o que você quer tem mais a ver com o Room Speed que com o Frames Per Second(FPS) então coloque assim:
valor*(room_speed/velocidadepadrao) // velocidadepadrao seria como a real que você colocou para funcionar.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Qui 12 Jul 2012, 19:18
A lógica é:

x += velocidade * (room_speed / fps)

Então se o fps for igual a room_speed, o resultado dos parênteses será 1 e ele andará na velocidade indicada.

Se o fps for metade do room_speed, o resultado será 2 e ele andará no dobro da velocidade.

Ou seja, se o jogo for 2 vezes mais lento, ele andará 2 vezes mais rápido, compensando o problema.

Mas é claro que se o FPS estiver muito baixo, você irá ver seu personagem saltar grandes posições na tela.
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Sex 13 Jul 2012, 01:25
Hm, eu entendi, mas pelo que eu andei testando, essa formula não funciona Tãaao bem, pois eu quero que o jogo rode normalmente, com o room_speed ilimitado, como os jogos de FPS e etc...

Eu andei procurando, e pelo que eu vi na YoyoGames, isso se chama "Delta Time", então eu achei isso : LINK
Espero que funcione, vou testar, logo logo eu dou um edit...

EDIT : Fail, ele só funciona se existir um FPS limite definido, por exemplo se tiver 30 FPS, ele vai ficar mais devagar que 60 FPS...Caso alguém aí ache algo que funcione para um FPS sem limite, deixe no tópico aqui por favor, até!

Dei mais uma procurada, e achei esta extensão : High Resolution Timer
Porém tem um problema, eu nem sei por onde começar D= Eu sempre fui péssimo com extensões, então se alguém puder me dar uma mãozinha, eu ficaria muito agradecido c:

Até mais!
avatar
Data de inscrição : 29/05/2008
Número de Mensagens : 422
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://felipejoys.webnode.com

Re: Como funciona está formula

em Sex 13 Jul 2012, 12:09
Você entende que no caso da fórmula FPS = Frames Per Second, e no caso de jogos FPS = First Person Shooter, certo?

Caso a parte, a enorme maioria dos jogos, especialmente os de qualidade, rodam a 60fps... não ilimitado. Tenho certeza de que há exceções, é claro.

Testes de benchmark podem tentar o maior fps possível, mas é para testar a capacidade da sua máquina.
avatar
Data de inscrição : 14/01/2010
Número de Mensagens : 348
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Sex 13 Jul 2012, 15:10
Pra que usar isto em game maker sendo que ele ja tem um controle imbutido para sincronizar. Este tipo de formula é usada para controlar a velocidade do jogo em outros PCs que não o seu, ou seja, quando vc faz um jogo em C++ ou Java (que não tem nada disso pronto) a velocidade é em acordo ao clock do seu PC, se vc colocar +=2 apenas quer dizer que é mais rapdo que +=1 e mais lento que +=3, mas isto não é uma constante, a proporção vai variar de acordo com a velocidade de processamento de cada computador, por isso usamos controles para sincronizar a velocidade em um laço principal pois a velociade estara compativel a milissegundos, isto sim, uma constante no sentido que 1 milissegundo é 1 milissegundo aqui e em jupter. Quando fiz meu primeiro jogo em C++, não levei isto em consideração (não havia nem passado pela minha cabeça) e levei um susto ao executar em outro PC mais rapdo que o meu, o jogo ficou tão rapdo que era impraticavel, bati cabeça ate achar uma formula (podem existir varias formas de fazer) para sincronizar, e agora tranquilo.
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Sex 13 Jul 2012, 19:57
Parece que vocês dois não leram o tópico eh? Eu ja entendi como a formula funciona, porém ela não é muito eficiente, eu encontrei uma extensão que funciona (Eu acho) Porém não sei como usá-la, alguém pode me ajudar?
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Sex 13 Jul 2012, 20:39
Eu fiz um código que funciona precisamente:
http://gmbr.forumeiros.com/t22885-delta-time#171688

Note que a primeira parte vai no Create e a segunda no Step.

Até mais!
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Sex 13 Jul 2012, 20:58
Pedro, sem querer ser chato, mas esta extensão não funciona para o que eu quero? Ter FPS o máximo possível no jogo com o room_speed em 9999 (claro que isso depende do PC) sem com que o personagem mude sua velocidade sabe?

PS : Eu tentei usar sua fórmula, e a bolinha foi a 500KMpH... ou mais...

Até! flw
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Sex 13 Jul 2012, 22:35
Funciona para o quer, já que o room_speed é 9999, ele vai automaticamente detectar. É só você tentar.

Editado

Exemplo:

Código:
contador = current_time;
velocidade = 5;
ideal = 9999/1000; // 9,999
--------------------------------------
contador = current_time - contador; //suponha que rode a 1000 fps, entao vai dar 1 ms

if keyboard_check(vk_right) x += (contador * ideal) * velocidade; //1 * 9,999 * 5 = 49,995

Se fosse rodar a 9999 fps, daria 1000*9,999*5 / 9999, ou seja, 5. Note que o outro foi 10 vezes mais rápido, isso porque supostamente rodaria 10 vezes mais lento.

Concluindo: o que você precisa fazer é dividir a velocidade por um valor, porque o meu código vai de acordo com o room_speed, que no caso seria grande.

Até mais!


Última edição por Pedrø em Sex 13 Jul 2012, 22:44, editado 1 vez(es)
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Sex 13 Jul 2012, 22:39
Só que tipo, caso o jogador queira ativar o VSync, o FPS vai mudar para a taxa de atualização do monitor dele, fazendo que não seja 9999, não vai bugar a fórmula desse jeito?
avatar
Data de inscrição : 29/05/2008
Número de Mensagens : 422
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://felipejoys.webnode.com

Re: Como funciona está formula

em Sab 14 Jul 2012, 00:14
Eu li, e minha intenção era indagar a respeito da sua intenção, que despertou minha curiosidade... Entende?
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Sab 14 Jul 2012, 01:14
Eu editei meu post, aqui.

Quanto ao monitor, geralmente eles têm uma taxa de 60 FPS. Pense nisso: mais do que isso é bobagem. Você coloca room_speed como 60 e pronto, o problema acaba.

Até mais!
avatar
Ranking : Nota C
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Número de Mensagens : 337
Insígnias de JAM :

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

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

Re: Como funciona está formula

em Dom 15 Jul 2012, 14:40
Na verdade, está longe de ser bobagem, inclusive em jogos de tiro e corrida, eu ainda não consegui configurar seu código direito, acho que a melhor solução, é aquela extensão, porém eu não sei como usá-la, pois eu sou um nubão com extensões, porém o pior de tudo, é que ela não tem um exemplo, um gmk para eu poder estudar, pra ver como funciona, se alguém estiver disposto a fazer um exemplo pra mim, eu ficaria muito agradecido Happy

Até mais flw
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum