在pyglet中使用pygame操纵杆

时间:2012-10-10 04:04:43

标签: python pygame pyglet joystick gamepad

我正在尝试用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操纵杆似乎不仅仅涉及导入和初始化。

也许如果我使用pygame的事件处理它会起作用,但是当从pygame甚至处理程序中使用pyglet绘制时,它可能会有自己的问题。

2 个答案:

答案 0 :(得分:1)

好吧,我只是通过使用包含操纵杆支持的Pyglet 1.21alpha来解决这个问题。

答案 1 :(得分:0)

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

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