我正在编写一款传统分辨率为240 x 320(垂直屏幕)的街机游戏
我需要实时渲染到现代显示器。 这意味着我需要它加倍(输出上1个像素= 4)或甚至三个(1个像素= 9)
我不能简单地对精灵进行双倍缩放,因为游戏运动不会随之缩放。 (运动不会“突然”到视觉尺度)
目前我有一个480 x 640像素的游戏窗口。
我将所有游戏精灵打到240 x 320表面,双重缩放并用pygame将该表面输出到窗口。现在游戏已经放慢了太多。
所有这些仿真器如何能够实现具有大清晰像素和pygame的双倍尺度和三重尺度?我认为SDL在2D光栅化方面会更好。
以下是我目前的代码:
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)
答案 0 :(得分:1)
我发现pygame.transform.scale2x()在for循环中。尝试在pygame.display.update()之前使用它。如果有一个以上的子弹,那么我就会看到它如何迅速变得迟钝。