2014-01-18 35 views
0

我正在寫一個街機遊戲與傳統的分辨率240×320(豎屏)pygame的 - 實時2x縮放低分辨率

我需要渲染實時現代顯示。 這意味着我需要它加倍(1像素= 4的輸出)或甚至三倍(1像素= 9)

我不能簡單地雙倍縮放精靈,因爲遊戲運動不會與他們成比例。 (運動不會「捕捉」視覺比例)

目前我有一個480 x 640像素的遊戲窗口。

我將所有遊戲精靈都拍攝到240 x 320的表面,雙倍縮放它並使用pygame將該表面輸出到窗口。現在這場比賽已經放慢了很多。

所有這些模擬器如何可以做出很好的雙倍比例和三倍比例的大幹淨像素和pygame呢?我認爲SDL在二維光柵化方面會更好。

這裏是我目前擁有的代碼:

import pygame 
import sys 
import random 
from Bullet import Bullet 

bullets = [] 

pygame.init() 
fps_clock = pygame.time.Clock() 

# Our final window layer 
window = pygame.display.set_mode((480, 640)) 

# This is the layer that gets scaled 
render_layer = pygame.Surface((240, 320)) 

red = (255, 0, 0) 
white = (255, 255, 255) 
dkred =(127, 0, 0) 

counter = 0; 

# Sprite resources 
bullet_sprite = pygame.image.load("shot1.png") 
bullet_sprite2 = pygame.image.load("shot2.png") 

while True: 
    render_layer.fill(dkred) 

    for i in bullets: 
     i.tick() 
     if i.sprite == "bullet_sprite1": 
      render_layer.blit(bullet_sprite, (i.x - 12, i.y -12)) 
     else: 
      render_layer.blit(bullet_sprite2, (i.x - 12, i.y -12)) 

     pygame.transform.scale2x(render_layer, window) 

     if i.x < 0 or i.y < 0 or i.x > 240 or i.y > 320: 
      i.dead = True 

    bullets = [x for x in bullets if x.dead == False] 
    counter += 3.33 
    for i in range(10): 
     if i % 2 == 0: 
      bullets.append(Bullet(120,120,360.0/10*i - counter, 3, -1, 
            sprite = "bullet_sprite1")) 
     else: 
      bullets.append(Bullet(120,120,360.0/10*i - counter, 3, -1, 
            sprite = "bullet_sprite2")) 
    for e in pygame.event.get(): 

     if e.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 

     if e.type == pygame.KEYDOWN: 
      if e.key == pygame.K_ESCAPE: 
       pygame.event.post(pygame.event.Event(pygame.QUIT)) 

    pygame.display.update() 
    fps_clock.tick(60) 

回答

1

我發現pygame.transform.scale2x()是在一個for循環。嘗試在pygame.display.update()之前使用它。如果有不止一顆子彈,那麼我會看到它如何迅速發展。