python - 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, (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) 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 1], [1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 2, 2, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 7, 0, 5, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 1], [1, 7, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 1], [1, 0, 2, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 2, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 2, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 2, 2, 2, 2, 1], [1, 0, 0, 0, 0, 0, 2, 2, 2, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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()
解决方案
推荐阅读
- arrays - 尝试使用打字稿将两个特定值作为键值对推送到另一个数组中
- javascript - 图片不会改变 HTML
- python - Python - 冗余 lambda 参数的表示法
- javascript - javascript没有将参数传递给rails应用程序
- node.js - 使用 Node.js Express 和 IISnode 在 Azure 中部署时如何解决错误 HRESULT: 0x6d HTTP 500 substatus 1013?
- file - ksh:从多扩展名文件名中删除最后一个扩展名
- authentication - 赛普拉斯:登录身份验证重定向到另一个域:解决方法?
- javascript - 客户端表单验证未发生 + 无法编辑表单元素
- angular - routerLink 未导航到新页面
- linux - 缺少从 java 应用程序创建文件夹的权限