如何解决Pygame : 使用 pygame.time.Clock() 和 FPS
我的许多 pygame 项目都遇到回滚问题。当我在我的代码末尾使用 pygame.time.Clock(FPS) 时,我移动的实体有回滚(角色的移动不应该是平滑的)。我尝试不使用 pygameclock 但现在我的角色移动得太快了。我还在 pygame.load.image 的末尾添加了转换,但根本没有区别......我能做什么?无论FPS多少,回滚仍然存在......这是我的代码:
import pygame from pygame.locals import *
pygame.init()
screen_width = 1000
screen_height = 1000
FPS = 60
clock = pygame.time.Clock()
screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption('Platformer')
tile_size = 50
sun_img = pygame.image.load('sun.png').convert_alpha()
bg_img = pygame.image.load('sky.png').convert()
class Player():
def __init__(self,x,y):
img = pygame.image.load('guy1.png').convert_alpha()
self.image = pygame.transform.scale(img,(40,80))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def update(self):
dx = 0
dy = 0
# ket pressed
key = pygame.key.get_pressed()
if key[K_LEFT]:
dx -= 5
if key[K_RIGHT]:
dx += 5
# check for collisions
# update player position
self.rect.x += dx
self.rect.x += dy
screen.blit(self.image,self.rect)
class World():
def __init__(self,data):
self.tile_list = []
dirt_img = pygame.image.load('dirt.png').convert()
grass_img = pygame.image.load('grass.png').convert()
row_count = 0
for row in data:
col_count = 0
for tile in row:
if tile == 1:
img = pygame.transform.scale(dirt_img,(tile_size,tile_size))
img_rect = img.get_rect()
img_rect.x = col_count * tile_size
img_rect.y = row_count * tile_size
tile = (img,img_rect) # tuple avec l'image et ses coordonnées
self.tile_list.append(tile)
if tile == 2:
img = pygame.transform.scale(grass_img,img_rect)
self.tile_list.append(tile)
col_count += 1
row_count += 1
def draw(self):
for tile in self.tile_list:
screen.blit(tile[0],tile[1]) # tile[0] = l'image / tile[1] = les coordonnées
world_data = [
[1,1,1],[1,7,8,2,5,4,3,6,1] ]
player = Player(100,screen_height - 130) world = World(world_data)
run = True
while run:
screen.blit(bg_img,(0,0))
screen.blit(sun_img,(100,100))
world.draw()
player.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.display.update()
clock.tick(FPS)
pygame.quit()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。