问题标签 [pysdl2]

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 投票
1 回答
397 浏览

android - Python - 重新打开pygame应用程序后黑屏

我用 python pygame 和 android 子集创建了一个简单的基于瓷砖的游戏。当我在我的安卓设备上退出应用程序并重新打开它时,我看到一个黑屏,如果我从“选项卡”关闭程序,那么游戏将再次运行,有人知道是什么问题吗?我必须在程序中添加一些代码吗?

0 投票
1 回答
144 浏览

python - 使用 PySdl2 的 sdl_CreateWindow 参数的类型错误

以下代码片段:

在 Windows 上出现此错误:

在此处输入图像描述

这个参数好像有问题:

使用:

  • 蟒蛇 3.5
  • PySDL2 0.9.5

奇怪的是这曾经在 Python 2.7 上工作。

任何人都知道可能是什么问题?

0 投票
1 回答
261 浏览

python - SDL2 调整大小事件转到错误的线程?

我使用 Python 3.5 中的 SDL2,我有 2 个线程,每个线程都绘制到自己的 OpenGL 窗口。

绘图顺利,所有鼠标和键盘事件都到达正确的线程。只有当我调整其中一个窗口的大小时,resize 事件才会转到错误的窗口。

这是我的代码的一部分:

SDL_MOUSEBUTTONDOWN 转到正确的窗口,打印正确的名称,但 SDL_WINDOWEVENT_RESIZED 转到错误的窗口,打印错误的名称。

有谁知道是什么原因造成的?每个 SDL 窗口只能从其自己的线程访问。

0 投票
2 回答
1831 浏览

python - 使用 sdl2 绘制轮廓圆

TL; DR:使用 (py)sdl2,我正在尝试绘制一个圆形轮廓,其内部是透明的,因此显示了在其后面绘制的对象。基本上我需要找到一种方法来擦除填充圆圈内部的像素(或将它们绘制成透明像素/将它们设置回透明像素)。我想尽可能使用纹理而不是表面。

我正在尝试实现一些在概念上看起来非常简单的东西,但我就是无法实现。

我想在 python 中用 sdl2 绘制一个圆形轮廓。当然,这用 sdl2gfx 函数实现起来很简单circleRGBA(),但它只允许你画出线宽为 1px 的轮廓。用较粗的轮廓画圆似乎是完全不可能的。

我之前使用透明颜色键(受此方法启发)使用 pygame 表面做过类似的事情,我知道表面也可用于 SDL2,但需要注意的是我试图坚持使用更快的纹理,这确实不提供色键机制。

为了在视觉上更好地解释事情:我想要实现的是:

目标

一个大于 1px 宽的圆(环),其内部是透明的,这样在圆后面绘制的项目将在内部可见。

我过去使用的一个技巧是只绘制 2 个实心圆圈,其中第二个较小的圆圈与背景颜色相同。但是,这会掩盖圆圈后面的所有内容(在本例中为白线)。下面是一个使用这种方法的函数示例:

导致:

第一次尝试

我还尝试了各种混合模式,这是我能得到的最好结果:

这导致:

第二次尝试混合

关闭,但没有雪茄,因为这条线现在似乎在圆圈的前面而不是在它的后面,据我所知,添加剂/屏幕混合,这是预期的行为。

我知道还有函数SDL_SetRenderDrawBlendMode,但是 sdl2gfx 绘图函数似乎忽略了您使用此函数设置的任何内容。

有没有比我更有经验的人以前做过类似的事情,谁能为我指明如何应对这一挑战的正确方向?

0 投票
0 回答
412 浏览

pygame - 转换为 PySDL2 会使我的应用程序运行得比在 PyGame 下更快吗?

我使用 Pygame 在 Python 中编写了一个小玩具。它会生成小动物(带有方向线的圆圈,而不是图像)在屏幕上四处游荡。我有兴趣让它更复杂,但我遇到了严重的性能问题。当屏幕上的小动物数量超过 20 个时,帧速率从 60fps 迅速下降到 11fps,屏幕上有 50 个。我已经用多种不同的方式检查了我的(非常简单的)代码,甚至使用 cProfile 进行分析,但没有找到任何优化的方法。

为了让长篇故事不那么长,我想我已经得出结论,PyGame 并不适合我要求它做的事情。因此,我希望转换为其他东西。C++ 是显而易见的答案,但由于这只是一个玩具,如果可能的话,我宁愿用 Python 编写代码。特别是因为它已经写好了。

在查看 C++ 时,我发现 Python 有一个 SDL(包装器?绑定?不确定术语):PySDL2。

谢谢你一直陪着我。现在得到了回报:是否有理由相信将我的应用程序转换为使用 PySDL2 会使其更快?特别是考虑到 PyGame 显然在后台使用了 SDL(不知何故)。

编辑:根据要求:

0 投票
2 回答
577 浏览

python - Python sdl2 路径无效

我正在测试 pysdl2 的学习飞行教程。(我也是 python 新手) http://pysdl2.readthedocs.io/en/rel_0_9_4/tutorial/index.html

我收到一个错误,认为这只是一些路径问题。

错误:

当前代码:

我在 ubuntu 16.04 上安装了 python 版本

python-sdl2 版本:

蟒蛇路径:

0 投票
1 回答
1260 浏览

python - 如何正确使用`sdl2.SDL_GetKeyboardState`?

我正在尝试使用 python 库pysdl2来构建一个模拟器。到目前为止,该库一直运行良好,但是我在接收键盘输入时遇到了问题。

我基本上需要做的是测试是否按下了某些键。在做了一些研究之后,我发现sdl2.SDL_GetKeyboardState哪个 SDL 函数与SDL_GetKeyboardState. 根据之前链接的文档和Lazy Foo' Productions 网站上的这篇文章,我构建了以下脚本:

上面的代码假设检测a​​按键是否被按下,如果是则打印一条消息。运行上述程序时,确实会出现一个窗口,但当a按下该键时,'A key pressed'会打印超过四千次。它不会继续打印消息,它只会打印数千次,然后停止。

起初,我认为问题可能是关键推演代码(第 15-16 行)应该在事件循环内部(第 11-14 行)。它在某种程度上起作用。它不是'A key pressed'每次按键打印数千次,而是每次按键只打印两次。

我的代码有问题吗?我是否缺少有关如何正确使用该sdl2.SDL_GetKeyboardState功能的信息?如何正确检测按键?

0 投票
1 回答
488 浏览

python - 使用 SDL2 在软键盘上调整 Kivy Android 应用程序中的窗口大小

我目前正在使用 Python 和 Kivy 框架开发 Android 应用程序。屏幕的大部分空间由 text_input 小部件使用。我想在 android 软键盘弹出时调整这个 text_input 的大小,以便 text_input 在键盘顶部结束。

为了做到这一点,我尝试使用 Window.softinput_mode='resize' 并且当它不起作用时,请参考 Window.keyboard_height 来进行我自己的调整大小和定位。根据 Window 源代码中的文档和注释,我发现在 Android(Kivy 1.9 - 1.10)上使用 SDL2 时两者都不支持。

我测试了 Window.softinput_mode='below_target' 似乎没有做任何事情,而 Window.softinput_mode='pan' 工作但没有给我正确的功能。

我尝试的最后一件事是设置 Window.softinput_mode='pan' 并使用绑定到 on_keyboard 事件的函数调用打印出 Window.top 的值,这样如果平移只是向上移动了 Window 位置,我可以使用那个参考点来做我的定位和调整大小。但是 Window.top 的值在平移时似乎不会改变。

引用此问题并提供工作示例的唯一其他堆栈流程使用了调整大小模式,该模式在使用 SDL2 时不起作用。

当软键盘出现在android上时正确调整主kivy窗口的大小

是否有任何解决方法来完成此功能或与 SDL2 不同的提供程序在 Android 上运行良好?

0 投票
0 回答
375 浏览

python - 不同的 sdl2 版本。如何使用 pip3 安装版本而不是 debian 版本?

对于SDL_GetVersionSDL2 Wiki声明:

如果您动态链接到 SDL,那么当前版本可能与您编译时所针对的版本不同。此函数返回当前版本,而 SDL_VERSION() 是一个宏,它告诉您编译时使用的版本。

下面是我的 python 脚本,用于检查我的 SDL2 编译和链接版本。我发现它们是不同的。

结果:

在我的系统上,我安装了以下 SDL2 包:

从上面我了解到libsdl2-2.0-0:amd64是链接包,PySDL2 0.9.6通过pip3本地安装的包是编译包(我查过version.py那个包里面的文件)。

问题:

  1. 引用中的“动态链接到 SDL”是什么意思?
  2. 如何指导我的应用程序使用 pip3 安装的 PySDL2 包而不是 debian 包?
0 投票
1 回答
429 浏览

python - 如何避免 sdl2.SDL_Event().window.windowID 始终返回值 2?

问题:我编写了以下测试代码来说明我的问题。每当有 sdl2 窗口事件时,sdl2.SDL_Event().window.windowID总是返回值 2,这意味着窗口被隐藏,这是不正确的。当鼠标指针移入和移出窗口时,也会返回值 2,当窗口移动、调整大小、最小化、最大化时,......

问题:如何让它正常工作?

测试代码: