问题标签 [pyglet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3188 浏览

python - 使用 pyglet 切换场景

任何人都可以推荐如何在 pyglet 中的场景之间切换。IE

  • 菜单 > 游戏
  • 游戏 > 菜单
  • 菜单 > 帮助

我能想到的唯一方法是使用不同的窗口,我很确定这将是完全错误的方法。或者通过重载窗口的所有事件函数。

对不起,如果我没有说清楚,但任何帮助将不胜感激

0 投票
1 回答
474 浏览

python - Win32 事件循环似乎是程序瓶颈

我正在使用 Pyglet 用 Python 制作游戏。我刚刚完成了显示部分,并且遇到了速度问题。像一个好人一样,我进行了分析,并得到了以下信息:(排除了无趣的位;目前,当我按下带有随机洋红色和白色的箭头键时,它只是重新绘制屏幕)

几乎所有总时间小于 0.5 秒的东西都被删除了。主要是不会有问题的东西。

这是我敲键盘半分钟的结果。在大多数情况下,我每秒可以获得 2 或 3 次屏幕变化。我个人希望尽可能快地敲击键盘。哎呀,我的目标是50-60fps。

win32 运行 10 秒没有花在子功能上,这让我担心。它可能是空闲时间(即使有一个 pyglet 空闲),但这不会花在绘图上吗?

我认为慢的部分实际上是快的;窗口 SetTile 部分。为了处理瓷砖,我有一个 2D 精灵列表,它们在屏幕上代表它们并简单地改变图像。我不认为这是一个问题。

我看到的另一个潜在问题是我的更新——每次调用它时我都必须遍历大约 2400 个图块。然而,这似乎并没有那么糟糕。90 次按键仅需 0.7 秒。

我开始怀疑这是否表明 Python 对我的需求来说太慢了。再说一次,它不应该是。这不是我正在做的计算量太大的事情。

tl; dr Python 中的 win32 事件循环是我的瓶颈吗,这是什么意思?如果没有,我可能在哪里失去了速度?

如果需要,可以使用代码。我假设它是 pyglet 使用的 Pywin32。

0 投票
4 回答
14846 浏览

python - 在 Python 中将十六进制字符转换为 int

我正在使用图形库Pyglet进行一些绘图,并希望将生成的图像作为 Python 列表输出(因此我可以将其转换为NumPy数组)。

Pyglet 给了我一串十六进制字符,如下所示:'\xff'(表示一个像素的值为 255)。如何将这样的字符串转换为 int?

我试过 int('\xff', 16),但这不起作用。请注意,根据文档,'\xnn' 被转义并编码为十六进制字符,但它没有告诉我如何将其转换为 int。

0 投票
1 回答
1199 浏览

python - Pyglet中使用update方法控制精灵动画

朋友们,我将非常感谢任何答案,提前感谢,这是我的问题:

在 pyglet 中,这是在屏幕中更新精灵的基本代码:

如果按下右键,这将导致精灵以每秒 10 像素的速度从点 x 向右移动。

但是让我们假设我需要在一个变量处从 X1 点精确移动到 X2 点,并在 X2 点精确停止,我该怎么做?

想象一下:
x_start=20
x_finish=40
我想从 x=20 移动到 x=40,并在 x=40 处停止。每秒像素数可以是任何值,在此示例中假设为 10 个像素。

如果我使用通常的代码,我可以这样做:

这是行不通的,因为pixel*dt不等于10dt是不规则的并且是浮点数(1/60=0.01, 0.01*10= 0.1,并且 dt 也是不规则的,所以有时是 0.01,其他是 0.019,其他0.021...等),所以每次更新执行 sprite.x 进化都是这样的 --> 10, 10,1, 10,24, 10,38, 10.51...等

所以,if sprite.x != 40:永远不会起作用(因为 sprite.x 总是一个浮点数,几乎不会是 40),我的播放器永远不会停止。

我知道这个问题有一个非常简单的解决方案,但我不知道,我很绝望。我正在pyglet开始我的旅程,所以我在这个阶段非常无知,需要帮助找到解决方案,我找不到出路。

是否有其他技术可以在不使用sprite.x += pixel*dt的情况下每帧更新一个精灵?还有其他解决方案吗?

非常非常感谢,来自葡萄牙的问候

0 投票
1 回答
294 浏览

python - Pyglet,图像的边缘像素被包裹

我目前正在使用 Python 开发游戏,并且一直在推迟尝试解决此问题。

出于某种原因,我的图像图块的边缘被缠绕到图像的另一侧。看起来不是很大,只是很小的亚像素量。

这是一个屏幕截图的特写,所以你可以明白我的意思,显然这些简单的瓷砖在某些地方比其他地方更明显(见橙色一侧,可以看到另一侧的道路)

0 投票
5 回答
1700 浏览

cross-platform - 2D游戏的开发框架?

我想开始研究我拥有的一个简单的游戏概念,作为一个业余项目/爱好/学习经验。

Pygames 或 Pyglet 立即浮现在脑海中,但看起来它们并没有被积极开发。或者也许他们是,但非常缓慢。

我想要一种高级编程语言、多操作系统支持、2D 焦点(或者无论如何都适合 2D 的东西)和积极的开发。我有哪些选择?

0 投票
1 回答
1318 浏览

python - 如何在桌面上绘制 PyOpengl 或 pyglet?

我正在编写一个应用程序,它希望使用 OpenGL 在 Windows 7 桌面上绘制基本的多边形和椭圆。根据this previous question,这可能是通过获取桌面的窗口句柄,我知道该怎么做。 在没有窗口的windows桌面上绘制OpenGL

但是,我有两个问题:

  1. 您实际上在哪里告诉 OpenGL 要绘制到哪个窗口?我一直在查看示例 1,但我根本无法弄清楚它到底在哪里通过 openGL 的 hwnd。我是否给 openGL 一个窗口句柄或设备上下文?

  2. 是否可以使用 PyOpenGL 或 Pyglet 做到这一点?还是我必须用 C 编写它,然后将代码包装在 ctypes 中?

0 投票
6 回答
5421 浏览

pyglet - pyglet 中找不到资源异常

我正在使用 Python 2.6.6 和 pyglet 1.1.4。在我的“Erosion”文件夹中,我有“Erosion.py”和一个名为“Images”的文件夹。在图像内部,有 .png 图像。一张图片被命名为“Guard.png”。

在“Erosion.py”中有一段是这样的:

当我运行它时,我得到了

我尝试将路径更改为 ['./Images'] 和 ['../Images']。我还尝试删除路径和重新索引调用并将 Erosion.py 和 Guard.png 放在同一个文件夹中。

0 投票
3 回答
486 浏览

python - 一起使用pyglet和pyopengl的问题

我有以下代码:

当我使用 pyglet 的 opengl 绑定时,它按预期工作。但是,当我使用 pyopengl 时,我只看到一团糟。

0 投票
3 回答
6490 浏览

python - pyglet 中的按钮小部件在哪里?

我正在检查 pyglet,但是,有趣的是,我找不到如何做一个简单的按钮!

所以

  • 创建标准按钮的标准方法是什么?

  • 是否有创建消息框的标准方法?打开/保存对话框?

  • 还是我错过了 pyglet 的重点?它不是另一个用于创建(也)表单、窗口、按钮、文本、标准小部件等的 gui 工具包吗?

如果这很重要,我正在 Windows PC 上使用 Python 2.x。