在 pyglet 中使用 pygame 操纵杆

Posted

技术标签:

【中文标题】在 pyglet 中使用 pygame 操纵杆【英文标题】:Using pygame Joystick in pyglet 【发布时间】:2012-10-10 04:04:43 【问题描述】:

我正在尝试使用 pyglet 编写一个简单的游戏,但使用 pygame 进行游戏手柄输入。以下代码成功地将轴值打印到命令行,但除了导入 pyglet 之外,实际上并没有显示 pyglet 窗口:

import pygame
import math
import sys
import pyglet

pygame.init()
pygame.joystick.init()    
js = pygame.joystick.Joystick(0)
js.init()

while True:
    pygame.event.get()
    jx = js.get_axis(0)    
    print('axis 0: ' + str(jx))

我不确定 pygame.event.get() 扮演什么角色,但没有它,返回的轴值总是为零。

所以现在当我尝试在我的 pyglet 事件中使用操纵杆时,我总是将值设为零(即使我将操纵杆保持在适当位置并移动窗口以触发绘制事件):

import pygame
import math
import sys
import pyglet

pygame.init()
pygame.joystick.init()    
js = pygame.joystick.Joystick(0)
js.init()

window = pyglet.window.Window()

@window.event
def on_draw():
    jx = js.get_axis(0)    
    print('axis 0: ' + str(jx))
    window.clear()

pyglet.app.run()

如果我将 pygame.event.get() 扔到 on_draw() 中,我会得到一个空白的白色窗口,我无法在没有控制台输出的情况下拖动它(直到我按下 esc,关闭窗口并退出,此时打印了几个轴值,全为零)。 event.get() 卡住了吗?

因此,尽管https://groups.google.com/forum/?fromgroups=#!msg/psychopy-users/GWNE4RvGbRE/TNRKM1L2PBwJ 提出了建议,但使用 pygame Joystick 似乎不仅仅涉及导入和初始化。

也许如果我使用 pygame 的事件处理它会起作用,但是当使用 pyglet 从 pygame 偶数处理程序进行绘图时,它可能会出现问题。

【问题讨论】:

【参考方案1】:

好吧,我将通过使用 Pyglet 1.21alpha 来回避这个问题,其中包括对操纵杆的支持。

【讨论】:

【参考方案2】:

我认为你的问题是你没有把它放在一个while循环中。这样它就不会只打印一次,例如你的函数(我还没有测试过)但应该可以工作,看起来像这样。

def on_draw():
 while True:
  jx = js.get_axis(0)
  print('axis 0: '+ str(jx))
  window.clear()

【讨论】:

以上是关于在 pyglet 中使用 pygame 操纵杆的主要内容,如果未能解决你的问题,请参考以下文章

使用 PyGame 中的操纵杆模块

Pyglet Opengl VBO

pygame:检测操纵杆断开连接,并等待它重新连接

python怎么安装第三方库,python国内镜像源,终于找到最全的安装教程啦;如Requests,Scrapy,NumPy,matplotlib,Pygame,Pyglet,Tkinter

python pyglet-audio.py

在 Pygame 中无法检测到 Xbox 控制器的移动