Pergunta

Eu trabalho em um jogo de tiro em 2D com lotes de objetos em movimento na tela (balas etc).

Eu uso BitmapData.copyPixels (...) para tornar tela inteira para um buffer: BitmapData. Então eu "copyPixels" do "tampão" para a tela: BitmapData. A framerate é de 60.

private var bitmap:Bitmap = new Bitmap();
private var buffer:Bitmap = new Bitmap();

private function start():void {
    addChild(bitmap);
}

private function onEnterFrame():void {
    // render into "buffer"
    // copy "buffer" -> "bitmap"
}

O problema é que os sprites estão rasgando: alguma parte de um sprite foi deslocado horizontalmente.

Parece um jogo de PC com VSYNC desligado.

Será que alguém resolver este problema?

UPDATE: a questão não é sobre o desempenho, mas sobre como se livrar de tela lacrimejamento

.

UPDATE [!]: Eu criei outra pergunta e aqui você pode tentar ambas as implementações: usando o flash forma ou BitmapData + copyPixels ()

Foi útil?

Solução

Eu sinto sua dor como eu estou atualmente nas trincheiras desenvolver meu próprio jogo. Com as predefinições, o renderizador flash produz problemas rasgar tela / V-Sync horríveis, independentemente do que o código que você produz.

Este é por isso que eu estava satisfeito por ter encontrado o mais simples, a resposta elegante, que não foi re-factoring código (que não ajuda um único bit, o problema é o jogador Flash, não o código).

Apenas permitir a aceleração de hardware em sua Configurações de publicação . Há duas opções diferentes:

Nível 1: direto ; e Nível 2:. GPU

Leia mais sobre o assunto na documentação oficial: Especificar configurações de publicação para arquivos SWF , e decidir o que é a melhor opção para o seu jogo.

Mercado alvo desempenha um fator aqui, se é um jogo sério para os jogadores, você não precisa se preocupar com possíveis problemas de desempenho, como a maioria dos jogadores tem GPU.

Este artigo não me fornecer a solução especificamente, mas me levar na direção certa. Mas, se o jogo vai ser em uma janela do navegador, você pode ter que usar a mesma técnica de configuração wmode de dirigir ou gpu também.

Outras dicas

A primeira coisa que você pode querer fazer é parar de tratar o Flash Player como é DOS. O Flash Player é um motor altamente otimizado jogo 2D como é e eu realmente não entendo por que você está tentando reinventar a roda, copiando um monte de fatias de bitmap ao redor. Claro que você vai ter problemas de desempenho.

O Flash Player não permite sincronizar a qualquer espaço em branco vertical ou horizontal porque o Flash Player simplesmente não têm qualquer noção disso.

Eu pessoalmente acho que você deveria repensar se aproximar, se você quiser 'mais suave' animação. O Flash Player é certamente capaz de isso, você está apenas tentando a abordagem errada.

não guardar as coisas para BitmapData, que vai matar, absolutamente matar a sua aplicação. Dados Bitmap não é muito alto desempenho.

Faça todos os seus elementos jogo em Flash, como Sprites (ou MovieClips se você deve), e, em seguida, o trabalho como o Flash foi feito para o trabalho, como uma plataforma de animação vetorial. Ele nunca foi otimizado para 2d gráficos bitmap. 2d gráficos vetoriais funcionar bem, e mesmo se você importar bitmaps que vai funcionar melhor se movimentar, então eles vão prestados a um objeto BitmapData.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top