问题标签 [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 投票
3 回答
1825 浏览

python - Pyglet 使用过多的 cpu

我最近开始从 pygame 进入 pyglet 和 rabbyt,但我遇到了一些障碍。

我创建了一个基本示例,其中一个 Sprite(在 pyglet.sprite.Sprite 中找到的类型)以每秒 60 帧的速度显示。问题是这个简单的程序以某种方式占用了 50% 的 CPU 时间。我用在 rabbyt 库中找到的 sprite 类型重复了实验,结果相同。

我决定以每秒 60 帧的速度渲染 1000 个精灵,然后是 10000 个精灵,令我惊讶的是 CPU 使用率保持在 50%。唯一的问题是移动或动画精灵会导致轻微的卡顿。

最后,我尝试以每秒 360 帧的速度运行。结果相同,使用率为 50%。

这是示例代码:

我正在使用带有 ATI HD 3500 卡的 Core 2 Duo。

任何建议/想法表示赞赏。

0 投票
2 回答
1713 浏览

python - 如何使用 Rabbyt 进行像素完美碰撞检测?

我已经开始研究 Rabbyt 库,到目前为止,我真的很喜欢将它与 pyglet 结合使用。

库中似乎没有实现的一件事是精灵之间的像素完美碰撞检测。我在实施时有两个问题。

首先,我正在使用 pyglet 加载精灵的纹理,但我不明白如何从纹理中获取位掩码(我非常有限的 OpenGL 知识是主要问题)。似乎 BufferImageMask 是从 AbstractImage 实例获得的,而不是从纹理本身获得的。这样做的正确方法是什么?

其次,实现实际的碰撞检测算法有哪些不同的方法?如果有任何方法/变化,我最感兴趣,因为到目前为止我读过的所有内容都是这样的:

碰撞检测算法@gamedev.net

我只是尽量不要错过任何重要信息,算法本身是可靠的。

提前致谢!

PS 我在 Python 2.7 中编码,但我宁愿在 C 中实现实际的像素完美碰撞检测算法并将其用作扩展。

更新

我已经设法使用非旋转精灵进行像素完美碰撞检测:

碰撞和可渲染只是与给定实体相关联的对象的字典。该算法是这个算法的修改版本:Pyglet 像素完美碰撞

虽然这非常好(而且速度很快,即使对于像这样被破解的代码也是如此)它对旋转的精灵没有用(我需要,除非为不同角度缓存大约 100 个不同版本的相同精灵是一个可行的选择),所以我是仍在寻找解决该问题的方法。

0 投票
2 回答
4932 浏览

python - FPS 与 Pyglet 显示器刷新率的一半

我是使用 Pyglet 的新手,我编写了一个小程序,可以在屏幕上移动一个球。现在我很难建立 60 fps 的稳定帧速率。虽然 Pyglet 应该与我的显示器的 60Hz 刷新率同步,但 Pyglet 将我的 fps 设置为我刷新率的一半(例如,当 60Hz、30 fps 时)。我的代码中是否有问题导致这种情况?

0 投票
1 回答
882 浏览

python - 在 Mac OS X Lion 上的 Eclipse PyDev 中将 python 作为 32 位进程运行

我已经使用 MacPorts 将 pyglet 安装到 Mac OS X 10.7.4 上。

pyglet 仅在为 32 位拱门构建时才有效,因此为了使用它,我必须像这样从命令行运行 python,

然后我就可以成功运行pyglet“hello world”程序了。

但是,我喜欢在 Eclipse 中使用 PyDev,但我不知道如何配置 PyDev 以将 python 作为 32 位进程运行。

我添加了 MacPorts python,

作为 Python 解释器(Preferences > Pydev > Interpreter - Python)。我创建了一个新项目并将 MacPorts python 设置为项目的解释器。但是当我从这个项目中运行pyglet "hello world" 程序时,我收到以下错误

这表明 PyDev 正在将 python 作为 64 位进程运行。

我可以看到我可以让我的 python 解释器设置环境变量(Preferences > Pydev > Interpreter - Python > Environment),但我不确定如何正确配置它(我已经尝试过)。

问题是:如何在 PyDev 中将 python 作为 32 位进程运行?

0 投票
1 回答
2223 浏览

python - 这个方法是怎么调用的?(Pyglet)

以下代码是 pyglet 使用的通常样式(使用装饰器)的替代方案。

谁能解释这里如何调用 on_draw() 方法?

使用装饰器编写的代码可以在这里找到。

0 投票
1 回答
514 浏览

python - 使用 gletools 和教程代码时出现 GL_TEXTURE_2D_ARRAY 错误

我正在尝试遵循与此处问题作者相同的教程 不幸的是,当我尝试在该页面底部运行示例代码时,我收到以下错误:

我在 Windows Vista 上使用 Python 2.6 和 Eclipse。关于如何解决这个问题的任何想法?

0 投票
1 回答
891 浏览

python - 使用 pyglet 时的纹理边框

我试图进入 pyglet 和 opengl 并在绘制带有纹理的简单三角形时得出奇怪的结果。绘制三角形时,纹理似乎有黑色边框。我试图改变 min/mag_filter 但对边界没有影响。我在这里错过了什么重要的东西吗?

在此处输入图像描述

0 投票
1 回答
359 浏览

python - Pyglet:火球射手,每当我按下指定的键时,火球都会保持加速而不是保持恒定速度

你如何使这段代码工作?只需pyglet安装并更改"fireball.png"存储在将此代码保存到文件的目录中的图像名称即可。

此代码创建一个黑色背景屏幕,其中显示 fps 并在您按下键时从位置 (10, 10) 沿 x 方向发射一个火球A

您会注意到,您射出的火球越多,所有火球的发射速度就越快。

问题:

  1. 为什么每次按 A 时火球飞得越来越快?

  2. 每次按 A 时,我应该如何阻止火球加速?

0 投票
1 回答
2108 浏览

python - 在 pyglet 中定期更改图像(精灵?)

如何使此代码工作:只需安装并更改 pyglet"assassin1.png""assassin2.png"使用存储在将此代码保存到文件的目录中的图像名称。

说明:此代码创建一个黑色背景屏幕,其中显示 fps,并在位置 (50, 30) 处显示图像“assassin1.png”。只要按住右方向按钮,图像就会向右移动。

目标:我想实现,只要按住右方向按钮并且图像正在移动,assassin1.png图像就会周期性地(每 0.25 秒左右)更改为第二张图像assassin2.png。这是为了制造图像正在行走的模糊错觉。

我如何实现这个目标?

我已经在 Assassin 类中创建了一个空forward_movement()方法,这似乎是放置代码以实现我的目标的合适位置。但是,如果您想将代码放在另一个地方,那也可以。

0 投票
1 回答
790 浏览

python - Pyglet: How to let sprite instances of same class share coordinates?

How do you make this code work: Just have pyglet installed and change assassin1.png,assassin2.png and assassin3.png with the name of images stored in the directory where you saved this code to a file.

This code displays assassin1.png while no key is held at position (50 30), when the right key is held the character moves forward and every 0.3 seconds the 2 images assassin2.png and assassin3.png are switched as to give the illusion of a walking character. Also the fps are shown.

Currently when you release the key the character will return to the original position (50, 30). When you press the key again the character moves from the position where the walking character stopped last.

I understand why this happens because the walking animation character and the standing character are two different instances of the same class. I first thought using class variables I would be able to store the position. But I can't seem to come up with a working solution. Does anyone have any ideas what I could do?

Edit 1 (@Hugh Bothwell)