Pygame开发剪刀石头布:图片缩放与居中异常求助
剪刀石头布游戏图片缩放与居中问题解决
开发剪刀石头布游戏,窗口已搭建完成,其他功能正常,但图片无法按预期缩放、无法居中显示。尝试的错误代码如下:
pygame.transform.scale = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com\~apple\~CloudDocs/Code_RPS/Rock.jpg' ),(10 , 5) pygame.transform.scale = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com\~apple\~CloudDocs/Code_RPS/Paper.jpg' ),(10 , 5) pygame.transform.scale = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com\~apple\~CloudDocs/Code_RPS/Scissors.jpg' ),(10 , 5)
附带代码截图与运行效果截图。
问题根源
你完全用错了pygame.transform.scale的用法——这是一个函数,不是可赋值的变量,不能直接把加载的图片和尺寸赋值给它。同时路径里的\~是多余的转义符,会导致路径解析错误。
正确实现步骤
1. 正确加载图片
先加载原始图片,注意修正路径:
import pygame pygame.init() # 窗口初始化(假设你已经有这部分代码) screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("剪刀石头布") # 加载原始图片,去掉多余的转义符 rock_img = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com~apple~CloudDocs/Code_RPS/Rock.jpg') paper_img = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com~apple~CloudDocs/Code_RPS/Paper.jpg') scissors_img = pygame.image.load('/Users/louistenant/Library/Mobile Documents/com~apple~CloudDocs/Code_RPS/Scissors.jpg')
2. 缩放图片
调用pygame.transform.scale()函数对图片进行缩放,注意你原来设置的(10,5)尺寸过小,可能导致图片几乎不可见,建议调整为合理尺寸:
# 设置目标缩放尺寸 target_size = (150, 150) rock_scaled = pygame.transform.scale(rock_img, target_size) paper_scaled = pygame.transform.scale(paper_img, target_size) scissors_scaled = pygame.transform.scale(scissors_img, target_size)
3. 居中绘制图片
通过计算坐标实现居中:窗口中心坐标减去图片自身宽高的一半。如果要横向排列三个图片,可参考以下代码:
# 获取窗口尺寸 screen_w, screen_h = screen.get_size() # 计算横向排列的起始X坐标(让三个图片整体居中) total_width = target_size[0] * 3 + 40 # 40是图片间的总间距 start_x = (screen_w - total_width) // 2 # 计算Y坐标(垂直居中) start_y = (screen_h - target_size[1]) // 2 # 绘制三个图片 screen.blit(rock_scaled, (start_x, start_y)) screen.blit(paper_scaled, (start_x + target_size[0] + 20, start_y)) # 间距20 screen.blit(scissors_scaled, (start_x + target_size[0]*2 + 40, start_y)) # 更新显示 pygame.display.flip()
4. 事件循环(确保窗口正常运行)
最后别忘了添加事件循环,让窗口保持打开:
running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 每次循环都要重绘背景(避免图片重叠) screen.fill((255,255,255)) # 重新绘制图片 screen.blit(rock_scaled, (start_x, start_y)) screen.blit(paper_scaled, (start_x + target_size[0] + 20, start_y)) screen.blit(scissors_scaled, (start_x + target_size[0]*2 + 40, start_y)) pygame.display.flip() pygame.quit()
内容的提问来源于stack exchange,提问作者Bibue35
相关产品推荐
相关产品推荐

