Como funciona está formula

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Como funciona está formula

Mensagem por Black Studio 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,

Black Studio

Ranking : Nota C
Número de Mensagens : 337
Idade : 18
Data de inscrição : 19/10/2011
Notas recebidas : C + C
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por luiz_eldorado 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.

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por Black Studio 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...

Black Studio

Ranking : Nota C
Número de Mensagens : 337
Idade : 18
Data de inscrição : 19/10/2011
Notas recebidas : C + C
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por theguitarmester 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.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por PedroX 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.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por Black Studio 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!

Black Studio

Ranking : Nota C
Número de Mensagens : 337
Idade : 18
Data de inscrição : 19/10/2011
Notas recebidas : C + C
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por KinKing 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.

KinKing

Número de Mensagens : 416
Data de inscrição : 29/05/2008
Reputação : 16
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://felipejoys.webnode.com

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por Da Galáxia 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.

Da Galáxia

Número de Mensagens : 348
Data de inscrição : 14/01/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por Black Studio 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?

Black Studio

Ranking : Nota C
Número de Mensagens : 337
Idade : 18
Data de inscrição : 19/10/2011
Notas recebidas : C + C
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por PedroX 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!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por Black Studio 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

Black Studio

Ranking : Nota C
Número de Mensagens : 337
Idade : 18
Data de inscrição : 19/10/2011
Notas recebidas : C + C
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por PedroX 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)

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por Black Studio 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?

Black Studio

Ranking : Nota C
Número de Mensagens : 337
Idade : 18
Data de inscrição : 19/10/2011
Notas recebidas : C + C
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por KinKing 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?

KinKing

Número de Mensagens : 416
Data de inscrição : 29/05/2008
Reputação : 16
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://felipejoys.webnode.com

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por PedroX 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!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por Black Studio 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

Black Studio

Ranking : Nota C
Número de Mensagens : 337
Idade : 18
Data de inscrição : 19/10/2011
Notas recebidas : C + C
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

Voltar ao Topo Ir em baixo

Re: Como funciona está formula

Mensagem por Conteúdo patrocinado Hoje à(s) 19:55


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

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