Olá @
AdrianoPpaula,
Caso queira ir direto para solução, sem altas explicações, vá direto para a conclusão.
60 é o dobro de 30
(peguei a calculadora para ver se era mesmo hueheuheuhe zoa)
Calculo do room_speed:
Tu criou todos valores constantes que estão relacionados a tempo, visto que o GM já tem um controle de tempo, em padrão não teria porque muito se preocupar para cuidar dele mesmo...
Mas basicamente, o GM calcula a velocidade assim(ou calculava...):
Tempo definido para ser a velocidade da room é o FPS é o limite de quadros que teu jogo terá de atualização/step em 1 segundo.
Se é 30, logo, ele divide 1000milisegundos por 30, o que vai dar 33,333333...ms
(agora peguei a calculadora, depois me senti um pouco burro por isso) isso quer dizer, que a cada vez que passar 33,333...ms de uma atualização do GM, e tiver atingido esse tempo, ele irá atualizar um step no seu jogo.
Caso tu aumentar de 30fps para 60fps, será então 1000/66 que é
(calculadora again) 16,666ms
Então, sabemos que o GM controla o room_speed por dois cálculos, um para saber o tempo de cada atualização no jogo, e outro para calcular a diferença entre cada vez que ele, o programa/executável, é atualizado, o que pode ter um contador que ao atingir o número mágico de 1000/room_speed, é atualizado. (essa diferença é chamada geralmente de
delta_time)
Como mudar o room_speed e continuar com o "mesmo andamento do jogo", "mesma velocidade do jogo":
Bom, então o GM faz o controle já da velocidade de quantos steps terá por segundo, através do room_speed.
Se eu tenho um hspeed de 5, quer dizer que a cada step, esse objeto está adicionando 5 x do objeto, porque basicamente o GM utiliza essas funções built-in assim:
objeto have: x, y, speed, hspeed, vspeed...
step padrão: (scripts do programador do jogo) y+=vspeed; x+=hspeed;
(Logicamente existe muito mais coisas feitas aí dentro, mas pro exemplo é essa que precisa, e essa uma das que sei hjuehueheuheu)
Então,
vamos ser mais práticos agora com a questão sua:
- minha room_speed é 30.
- meu objeto tem velocidade 10, o que eu quero dizer com isso, é que ele vai se mover 300 pixeis em 1 segundo.
- tem um alarme de 1800 que conta o tempo que ele tem para coletar as fezes de seu cachorro, esse 1800 eu coloquei porque quero que após 1 minutos, acabe o tempo dele coletar.
- Tem uma variável que a cada 'feze' que ele coleta, aumenta 1 unidade de tempo, além de dar 100 de score.
- a unidade de tempo é 5 segundos, por isso coloquei pra adicionar +150 ao alarme de tempo.
Mas agora eu quero colocar o room_speed pra 60, esse jogo ao executar ficou muito rápido o herói, e, ficou pouco tempo... o que eu faço pra continuar como antes? terei que mudar as variáveis? mas quais?
Bom, a resposta é bem simples: as relacionadas a tempo real.
No exemplo, quais são?
velocidade, alarme, unidade de tempo, e tempo da unidade de tempo.
Certo?
No!
porque unidade de tempo não tá relacionada com o tempo real(
será, mas parece..) ela representa uma unidade de um tempo pré determinado em outra variável, que é o tempo da unidade de tempo. o correto fica:
velocidade, alarme, e tempo da unidade de tempo.
Score logicamente não está ligado ao tempo real, ele está sendo atualizado toda vez que um coco é coletado, porém, deve se tomar o cuidado com váriaveis soltas em step, draw, collision, keycheck(sem ser o press, release)..., porque a taxa de atualização desses objetos está diretamente ligada a velocidade da room.
velocidade, alarme, unidade de tempo, e tempo da unidade de tempo.
Olá @
AdrianoPpaula,
60 é o dobro de 30
(peguei a calculadora para ver se era mesmo hueheuheuhe zoa)
Calculo do room_speed:
Tu criou todos valores constantes que estão relacionados a tempo, visto que o GM já tem um controle de tempo, em padrão não teria porque muito se preocupar para cuidar dele mesmo...
Mas basicamente, o GM calcula a velocidade assim(ou calculava...):
Tempo definido para ser a velocidade da room é o FPS é o limite de quadros que teu jogo terá de atualização/step em 1 segundo.
Se é 30, logo, ele divide 1000milisegundos por 30, o que vai dar 33,333333...ms
(agora peguei a calculadora, depois me senti um pouco burro por isso) isso quer dizer, que a cada vez que passar 33,333...ms de uma atualização do GM, e tiver atingido esse tempo, ele irá atualizar um step no seu jogo.
Caso tu aumentar de 30fps para 60fps, será então 1000/66 que é
(calculadora again) 16,666ms
Então, sabemos que o GM controla o room_speed por dois cálculos, um para saber o tempo de cada atualização no jogo, e outro para calcular a diferença entre cada vez que ele, o programa/executável, é atualizado, o que pode ter um contador que ao atingir o número mágico de 1000/room_speed, é atualizado. (essa diferença é chamada geralmente de
delta_time)
Como mudar o room_speed e continuar com o "mesmo andamento do jogo", "mesma velocidade do jogo":
Bom, então o GM faz o controle já da velocidade de quantos steps terá por segundo, através do room_speed.
Se eu tenho um hspeed de 5, quer dizer que a cada step, esse objeto está adicionando 5 x do objeto, porque basicamente o GM utiliza essas funções built-in assim:
objeto have: x, y, speed, hspeed, vspeed...
step padrão: (scripts do programador do jogo) y+=vspeed; x+=hspeed;
(Logicamente existe muito mais coisas feitas aí dentro, mas pro exemplo é essa que precisa, e essa uma das que sei hjuehueheuheu)
Então,
vamos ser mais práticos agora com a questão sua:
- minha room_speed é 30.
- meu objeto tem velocidade 10, o que eu quero dizer com isso, é que ele vai se mover 300 pixeis em 1 segundo.
- tem um alarme de 1800 que conta o tempo que ele tem para coletar as fezes de seu cachorro, esse 1800 eu coloquei porque quero que após 1 minutos, acabe o tempo dele coletar.
- Tem uma variável que a cada 'feze' que ele coleta, aumenta 1 unidade de tempo, além de dar 100 de score.
- a unidade de tempo é 5 segundos, por isso coloquei pra adicionar +150 ao alarme de tempo.
Mas agora eu quero colocar o room_speed pra 60, esse jogo ao executar ficou muito rápido o herói, e, ficou pouco tempo... o que eu faço pra continuar como antes? terei que mudar as variáveis? mas quais?
Bom, a resposta é bem simples: as relacionadas a tempo real.
No exemplo, quais são?
velocidade, alarme, unidade de tempo, e tempo da unidade de tempo.
Certo?
No!
porque unidade de tempo não tá relacionada com o tempo real(
será, mas parece..) ela representa uma unidade de um tempo pré determinado em outra variável, que é o tempo da unidade de tempo. o correto fica:
velocidade, alarme, e tempo da unidade de tempo.
Score logicamente não está ligado ao tempo real, ele está sendo atualizado toda vez que um coco é coletado, porém, deve se tomar o cuidado com váriaveis soltas em step, draw, collision, keycheck(sem ser o press, release)..., porque a taxa de atualização desses objetos está diretamente ligada a velocidade da room.
velocidade, alarme, unidade de tempo, e tempo da unidade de tempo.
Conclusão:
Como percebeu
(ignore caso tenha pulado para a conclusão), tu terá que controlar o tempo dessas variáveis ligada ao tempo "real", e maneira mais simples de fazer isso, pra evitar a cada mudança de room_speed, ter que mudar, é fazer algo assim:
//Escolhi que 30 é o valor base para o calculo de rsp(room_speed). tu pode colocar isso num create "master", ou colocar em algum lugar para ser atualizado direto, caso você queira fazer mudanças no valor de room_speed no jogo e continuar com a mesma velocidade do jogo.
Caso queira deixar esse valor que só muda enquanto está criando o jogo, pode até criar uma constante ao invés de variável.
Agora, vem a mágica:
para variáveis como velocidade do jogador, tu irá colocar:
Código: Selecionar todos
speed = velocidadeMinha / rsp;
alarmDeTempoParaCatarCoco = tempoParaCatarCoco * rsp;
então, se velocidadeMinha for 5, e o room_speed for 30, speed vai ser 5, se room_speed for 60, a velocidade vai ser 2.5
Só tomaria um pouco de cuidado ao usar o alarm padrão do GM, porque caso tu definir tempos muito curto, e depois ocorrer divisões(caso tu tava em um room_speed mais alto e foi pra menor), porque pode ser que esse valor ocorra atrasos, devido a não utilizar ponto flutuante(não utilizava antes, pelo menos).
- Esse conceito pode ser usado também para o FPS, para independente de quantos frames está tendo por segundo, um objeto vá se movimentar uma quantidade "exata" de pixeis em por segundo.
Código: Selecionar todos
delta_time = (tempoAtual-tempoAnterior); //Aqui varia o tempo de pc para pc, acho que o nome da variável é current_time
rsp = delta_time / 100; //100 foi um valor base escolhido aleatoriamente, escolha com segurança...
Era isso.
Ficou um pouco grande, mas com a conclusão já serve como operacional hehe
Se coloquei algum conceito errado, como o delta_time, favor me corrigirem.