多屏幕编程时用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.rhkb.cn/news/493394.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏渠道假量解决方案

某推广公司在推广过程中被查出“短期内点击量激增”“存在同一地址多次访问”“已注册用户重复注册”等数据作弊行为&#xff0c;法院判罚退还服务费200余万元&#xff0c;并赔偿违约金约350万元。 某公司为提升其游戏在应用商店榜单排名&#xff0c;委托某网络公司进行下载、注…

物联网:全面概述、架构、应用、仿真工具、挑战和未来方向

中文论文标题&#xff1a;物联网&#xff1a;全面概述、架构、应用、仿真工具、挑战和未来方向 英文论文标题&#xff1a;Internet of Things: a comprehensive overview, architectures, applications, simulation tools, challenges and future directions 作者信息&#x…

29、基于springboot的网上购物商城系统研发

本课题是根据用户的需要以及网络的优势建立的一个基于Spring Boot的网上购物商城系统&#xff0c;来满足用户网络购物的需求。 本网上购物商城系统应用Java技术&#xff0c;MYSQL数据库存储数据&#xff0c;基于Spring Boot框架开发。在网站的整个开发过程中&#xff0c;首先对…

Spring Boot--06--整合Swagger

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Swagger一、简介官网&#xff1a;https://swagger.io/ Swagger 的优势 二、基本使用1. 导入相关依赖2. 编写配置文件2.1 配置基本信息2.2 配置接口信息2.3 配置分组…

写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践

自OceanBase 4.3.3版本推出以来&#xff0c;向量检索的能力受到了很多客户的关注&#xff0c;也纷纷表达希望OB能拓展更多 多模数据库大模型 的AI应用实践。 在上篇文章 &#x1f449; OceanBase LLM&#xff0c;免费构建你的专属 AI 助手 &#xff0c;我们介绍了如何去搭建一…

题海拾贝:力扣 86.分隔链表

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

sql server索引优化语句

第一步 建一个测试表 --create table TestUsers --( -- Id int primary key identity(1,1), -- Username varchar(30) not null, -- Password varchar(10) not null, -- CreateDateTime datetime not null --)第二步 插入100w数据 大概1分钟执行时间 ----插入数据…

多智能体/多机器人网络中的图论法

一、引言 1、网络科学至今受到广泛关注的原因&#xff1a; &#xff08;1&#xff09;大量的学科&#xff08;尤其生物及材料科学&#xff09;需要对元素间相互作用在多层级系统中所扮演的角色有更深层次的理解&#xff1b; &#xff08;2&#xff09;科技的发展促进了综合网…

VS Code Copilot 与 Cursor 对比

选手简介 VS Code Copilot&#xff1a;算是“老牌”编程助手了&#xff0c;虽然Copilot在别的编辑器上也有扩展&#xff0c;不过体验最好的还是VS Code&#xff0c;毕竟都是微软家的所以功能集成更好一些&#xff1b;主要提供的是Complete和Chat能力&#xff0c;也就是代码补全…

基于层次化设计方法,设计一个16位二进制全加器

设计思路&#xff1a;先一个半加器和一个或门&#xff0c;每两个半加器构成一个全加器&#xff0c;每四个全加器组成一个4位全加器&#xff0c;再将这4个4位全加器依次相连组成一个16位二进制全加器。 半加器的逻辑表达式&#xff1a;sumAB; coutAB; 半加器的真值表 全加器的逻…

ES搜索原理

ES搜索原理 bg: 搜索的时候&#xff0c;使用模糊查询经常出现搜索不到的情况&#xff0c;不如mysql的like有效。 https://www.bilibili.com/video/BV1yb421J7oX/?spm_id_from333.337.search-card.all.click&vd_source3f917722acc36b0fcca7cca2d21394e2 基础概念 索引&a…

轻松上手:使用 Vercel 部署 HTML 页面教程

&#x1f600; 在学习前端的过程中&#xff0c;部署项目往往是一个令人头疼的问题。然而&#xff0c;Vercel 为我们提供了一个便捷且免费的解决方案。 Vercel 是一个强大的云平台&#xff0c;专门用于前端项目的部署和托管。它不仅支持多种前端框架和静态网站生成器&#xff0…

STL 剖析

STL 六大组件 「STL 六大组件的交互关系」 Container 通过 Allocator 取得数据储存空间Algorithm 通过 Iterator 存取 Container 内容Functor 可以协助 Algorithm 完成不同的策略变化Adapter 可以修饰或套接 Functor、Iterator 配置器(allocator) 配置器&#xff1a;负责空间…

HTTP—03

触发 GET 请求 1&#xff09;直接在浏览器 地址栏 输入 URL&#xff0c;此时构成了一个GET请求 2&#xff09;HTML中的一些特殊标签可能会触发 例如 img,a,link,script... 3&#xff09;通过Form表单触发&#xff08;Form本质也是一个HTML标签&#xff09; 4&#xff0…

C 数组:索引魔杖点化的数据星图阵列

一、数组 1.数组的概念 数组是⼀组相同类型元素的集合&#xff1b;从这个概念中我们就可以发现2个有价值的信息&#xff1a; 数组中存放的是1个或者多个数据&#xff0c;但是数组元素个数不能为0。数组中存放的多个数据&#xff0c;类型是相同的。 2.数组的分类 数组主要分为一…

苹果手机怎么清理空间:拯救你的拥挤手机

在数字生活的海洋中&#xff0c;我们的苹果手机就像一艘小船&#xff0c;载满了照片、应用、视频和各种下载的“宝贝”。随着时间的推移&#xff0c;这艘小船开始变得拥挤&#xff0c;航行速度放缓&#xff0c;甚至有时候直接卡壳。苹果手机怎么清理空间&#xff1f;是时候学会…

Ubuntu上如何部署Nginx?

环境&#xff1a; Unbuntu 22.04 问题描述&#xff1a; Ubuntu上如何部署Nginx&#xff1f; 解决方案&#xff1a; 在Ubuntu上部署Nginx是一个相对简单的过程&#xff0c;以下是详细的步骤指南。我们将涵盖安装Nginx、启动服务、配置防火墙以及验证安装是否成功。 1. 更新…

javaScriptBOM

1.1、BOM概述 1.1.1、BOM简介 BOM&#xff08;browser Object&#xff09;即浏览器对象模型&#xff0c;它提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是window。 BOM由一系列的对象构成&#xff0c;并且每个对象都提供了很多方法与属性 BOM缺乏标准…

Unity3D仿星露谷物语开发7之事件创建动画

1、目标 掌握事件通知的Publisher - Subscriber设计模式&#xff0c;并通过事件通知触发动画。 2、发布者/订阅者模式 首先&#xff0c;定义事件Event 然后&#xff0c;Publisher触发事件 最后&#xff0c;Subscriber订阅事件并进行处理 &#xff08;1&#xff09;创建动作…

点击展示大图预览

原文链接在table表格里能够实现&#xff0c;点击里面的图片实现大图预览的效果&#xff1b; 一、先安装viewer — 使用npm安装 npm install v-viewer --save二、在main.js中引入 import Viewer from v-viewer //点击图片大图预览 import viewerjs/dist/viewer.css Vue.use(…