O que acontece quando o computador não pode executar um programa a tempo?

0

Considere um jogo baseado em ticks, em que o computador precisa executar 100 operações a cada tick. O que acontece se o computador puder executar apenas 50 operações durante um único tick?

    
por cdks 03.01.2014 / 20:49

2 respostas

1

Isso depende de como o computador é feito. Naquela época, os videogames rodavam tão rápido quanto o processador. Esse é o mesmo videogame projetado para um computador sendo jogado em um computador duas vezes mais rápido seria executado duas vezes mais rápido. Então, para evitar esse problema, os computadores tinham o botão "Turbo", que limitava a velocidade da CPU para que o jogo fosse jogável (imagine jogar tetris a 500x da velocidade).

Você pode ver o que quero dizer em ação aqui , onde o cara brinca com o relógio desse gameboy.

Hoje em dia, um videogame decente verificará a hora e ajustará a localização dos carros em movimento, observando a hora. Então, se estamos em um certo tick e no próximo tick 2 segundos se passaram ... bem; com base na velocidade do carro, podemos calcular onde deveria estar agora.

No primeiro cenário, o jogo é executado mais lento . No segundo cenário, o jogo é executado com rapidez, mas choppier .

Agora, se a sua pergunta for realmente "Eu não estou diminuindo a velocidade do jogo nem diminuindo o framerate nem fazendo nada para evitar a situação em que a CPU não pode terminar todas as tarefas. Quando o tempo acabar, marque acabou e começa tudo de novo. O que vai acontecer? "

Bem, se o loop do jogo for algo como:

  1. Tome a entrada do controlador.
  2. Calcular locais de objetos em movimento
  3. Calcular colisões
  4. Desenhe o cenário e a maioria dos caracteres
  5. Calcular danos
  6. Desenhar modelo de jogador
  7. Desenhe roupas de jogador.

e a CPU só chegou ao ponto 6.5, você acabaria com um personagem sem pernas, mas o jogo poderia ser o mesmo (ou travar).

Se a CPU tiver passado das 4, o carro que está te atropelando não vai te matar e apenas passar por você.

É claro que isso depende da implementação do jogo e estou sendo excessivamente imaginativo.

    
por 03.01.2014 / 21:01
0

Consider a tick-based game, where computer needs to execute 100 operations every tick. What happens if computer can execute only 50 operations during single tick?

Depende do que acontece quando o tick expira e de quais são as operações.

Se o seu jogo estiver em algo como Visual Basic, onde um evento do timer dispara operações, e suas operações são um procedimento que executa o jogo, então o timer, no final do "tick", vai disparar o procedimento novamente.

A menos que você tenha feito provisões em contrário, o procedimento de execução existente continuará em andamento. Haverá "sobreposição". Se o seu código não for "reentrante" - isto é, variáveis estáticas são usadas durante todo o procedimento, alterações inesperadas nas variáveis resultarão no primeiro procedimento em execução e no segundo procedimento em execução. Isso fará com que o procedimento se comporte mal.

Se o idioma ou a estrutura que você está usando encerrar o primeiro procedimento em execução antes de iniciar outro quando o evento "tick" ou timer aparecer, obviamente, o que quer que tenha sido feito naquele tick não será concluído. Se algumas variáveis para o final do tick foram feitas para serem atualizadas e o próximo tick depende, o procedimento não funcionará como esperado.

Em um computador antigo ou sistema de jogo, o "tick" era tipicamente um IRQ ou NMI gerado quando o chip de vídeo chegava a uma determinada linha na renderização de um vídeo. Bons jogos, se eles estiverem "sobrecarregados" e não puderem completar seu trabalho em um tick ou "frame" neste caso, lembrariam esse fato, provavelmente usando um sinalizador que é verificado no início de cada quadro, e continuarão trabalho, introduzindo desaceleração, mas não falhando. Quando o trabalho é concluído, o sinalizador é limpo. Isso teria que ser verificado no início de cada "tick".

    
por 03.01.2014 / 23:12