2012-01-12 22 views
0

どうすればスプライト画像が制御不能にちらつくのを防ぐことができますか? (画像名は配管工です)。プログラムを実行すると、唯一のイメージフリッカーがスプライトになります。なぜスプライト画像が点滅/フィラーですか?

import pygame 
import os, sys 
import itertools 
import pygame 
from pygame.sprite import Sprite 

cloud_background = pygame.image.load('clouds.bmp') 
brick_tile = pygame.image.load('brick_tile.png') 
plumbers = pygame.image.load('Mario_sideways_sprite_2xL.png') 

pink = (255, 64, 64) 
w = 640 
h = 480 
screen = pygame.display.set_mode((w, h)) 
running = 1 

def setup_background(): 
    screen.fill((pink)) 
    screen.blit(cloud_background,(0,0)) 
    brick_width, brick_height = brick_tile.get_width(), brick_tile.get_height() 
    for x,y in itertools.product(range(0,640,brick_width), 
           range(390,480,brick_height)): 
     # print(x,y) 
     screen.blit(brick_tile, (x,y)) 


def show_sprites(): 
    screen.blit(plumbers,(50,337)) 
    pygame.display.flip() 



while running: 
    show_sprites() 
    setup_background() 
    pygame.display.flip() 
    event = pygame.event.poll() 
    if event.type == pygame.QUIT: sys.exit() 
+1

show_spritesで反転し、背景を設定した後。 "flip"を取り除いてイメージが表示されない場合は、 – Glider

+0

が動作する可能性があるshow_spritesのフリップを削除してみてください。 – enrique2334

+1

setup_background()を呼び出してからshow_sprites()を呼び出すと思いますスプライトは背景に描画されます。また、gliderが言ったように、show_spritesからpygame.display.flip()を削除してください。 –

答えて

0

私は本当にpygameのを知りませんが、あなたはこの分野でより多くの経験を持った人からの回答を待ちながら。私はこのアドバイスを提供することができます。

プロセッサ集中型プロセスであるたびに、バックグラウンドをゼロから設定してください。最善の方法は、代わりに実際に必要な背景の部分のみを再レンダリングすることです。私は、あなたの配管スプライトが以前に占有していた部分です。

通常、これは古いX、古いYという2つの変数を作成することで行います。これは、レンダリングプロセスが過ごすことになります。

現在、ループサイクルごとに画面全体をレンダリングします。

関連する問題