当前位置: 首页 > news >正文

Python pygame 主副屏编程时 在副屏上全屏窗口的方法

Python在windows环境中编程时,用pygame工具包能够很轻易的完成2D游戏的简单设计,非常好用,相关帖子很多。

而当电脑连接了多块显示器时(注意不是windows的多桌面),系统选择扩展这些显示器后,可以利用的屏幕空间变大,用pygame设计程序窗口的尺寸也可以同步增加,但在设定为全屏时,却无法指定具体的显示器,查找了很多帖子,都未能很好的解决。

最后,经过多次尝试后,发现有可能是因为pygame版本更新的原因,造成参数改变引起的。当前我用的版本是pygame 2.6.0 (SDL 2.28.4, Python 3.11.5),其它版本是否相同未曾试过。

具体办法是指定display函数的display_index =1 ,这个函数的参数为:

screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN | pygame.DOUBLEBUF | pygame.HWSURFACE,depth = 0,display_index = 0,vsync=0)

这里第二给参数列出了一些常用的flag,而关键的是第四个参数,之前找到的帖子中这个参数被前移到的第三个,所以一直试不出来。

完整的测试代码(如果你有两块或更多显示器,并在系统中选择的扩展这些显示器):

import pygame
import sys
import random# 初始化pygame
pygame.init()# 获取显示设备数量
num_displays = pygame.display.get_num_displays()
if num_displays < 2:print("系统检测到的显示设备数量少于2个。")exit(0)# 设置窗口在第二块显示器上显示
screen = pygame.display.set_mode((0,0), pygame.FULLSCREEN | pygame.DOUBLEBUF | pygame.HWSURFACE,0,1) # 设置窗口在第二块显示器上显示,display_index = 1
#screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN | pygame.DOUBLEBUF | pygame.HWSURFACE,depth = 0,display_index = 0,vsync=0)
pygame.display.set_caption('接苹果小游戏')
info = pygame.display.Info()
screen_width = info.current_w
screen_height = info.current_h
print(f"屏幕宽度:{screen_width},屏幕高度:{screen_height}")# 设置颜色
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)# 设置苹果和篮子的图片(你需要准备这些图片并放在相应路径下)
apple_image = pygame.image.load('apple.png')
basket_image = pygame.image.load('basket.png')# 苹果类
class Apple:def __init__(self):self.pos_x = random.randint(0, screen_width - apple_image.get_width())self.pos_y = 0self.speed = random.randint(2, 5)def move(self):self.pos_y += self.speedif self.pos_y > screen_height:self.__init__()  # 重置苹果位置和速度def draw(self):screen.blit(apple_image, (self.pos_x, self.pos_y))# 篮子类
class Basket:def __init__(self):self.pos_x = screen_width // 2 - basket_image.get_width() // 2self.pos_y = screen_height - basket_image.get_height() - 20self.speed = 5def move_left(self):self.pos_x -= self.speedif self.pos_x < 0:self.pos_x = 0def move_right(self):self.pos_x += self.speedif self.pos_x > screen_width - basket_image.get_width():self.pos_x = screen_width - basket_image.get_width()def draw(self):screen.blit(basket_image, (self.pos_x, self.pos_y))# 游戏主循环
def game_loop():apple = Apple()basket = Basket()score = 0clock = pygame.time.Clock()game_over = Falsewhile not game_over:for event in pygame.event.get():if event.type == pygame.QUIT:game_over = Trueelif event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:basket.move_left()elif event.key == pygame.K_RIGHT:basket.move_right()apple.move()basket_rect = pygame.Rect(basket.pos_x, basket.pos_y, basket_image.get_width(), basket_image.get_height())apple_rect = pygame.Rect(apple.pos_x, apple.pos_y, apple_image.get_width(), apple_image.get_height())if basket_rect.colliderect(apple_rect):score += 1apple.__init__()  # 重置苹果位置和速度screen.fill(WHITE)apple.draw()basket.draw()font = pygame.font.Font(None, 50)score_text = font.render(f"Score: {score}", 1, GREEN)screen.blit(score_text, (20, 20))pygame.display.flip()clock.tick(30)  # 设置游戏帧率pygame.quit()sys.exit()game_loop()

这是一个AI生成的游戏代码,改动的部分就是pygame.display函数的参数设定。祝工作顺利!


http://www.mrgr.cn/news/80947.html

相关文章:

  • 获取显示器(主/副屏)友好名称(FriendlyName)
  • 大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
  • 保障飞行安全:飞机起落架收放系统的挑战与突破
  • Spring中bean的线程安全问题
  • 理解 EXPLAIN
  • redis库基础知识
  • JAVA包装类变量赋值是会新创建对象实例
  • JAVA队列每次添加需要新实例才能独立更新
  • Docker镜像启动
  • 门户系统需要压测吗?以及门户系统如何压力测试?
  • 【操作系统不挂科】<内存管理-文件系统实现(18)>选择题(带答案与解析)
  • 什么是静态站点生成器,有哪些特点
  • Python毕业设计选题:基于Python的农产品销售系统的设计与实现_django
  • 稀疏矩阵的存储与计算 gaxpy
  • Spring Cloud Gateway 源码
  • CogVideoX: Text-to-Video Diffusion Models with An Expert Transformer 论文解读
  • Linux shell脚本用于常见图片png、jpg、jpeg、tiff格式批量转webp格式后,并添加文本水印
  • 【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
  • 游戏开发技能系统常用概念
  • 云计算HCIP-OpenStack02
  • 基础2:值类型与右值引用
  • redo log 和 undo log
  • 实现 WebSocket 接入文心一言
  • Golang学习历程【第二篇 fmt包变量、常量的定义】
  • aosp15 - App冷启动
  • 编译原理复习---基本概念+推导树