我一直试图为pyplay开发一个“文本框”类,作为一个小小的个人项目,我遇到了一个真正难倒我的问题。我试图扩展在这里找到的pyplay文本输入类,把它包装在一个支持多行和滚动功能的文本框类中。
当我试图在文本行之间上下移动闪光灯时,问题就来了。基本上,一旦按下“向上”箭头,就会将闪光灯一直移动到顶部,然后它就不再响应向下移动。
下面是我如何给pygame\u文本框
类事件的代码:
while True:
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
test_box.update(events)
test_box_2.update(events)
test_box.draw(screen, (100, 100))
test_box_2.draw(screen, (200, 250))
pygame.display.update()
下面是文本框类的代码(event
来自上述代码):
if event.type == pl.KEYDOWN:
if self.is_active:
print("reading in text box: {}".format(event))
if event.key == pl.K_UP and self.cursor_line > 0:
self.cursor_line -= 1
print("cursor going UP to {}".format(self.cursor_line))
if event.key == pl.K_DOWN and self.cursor_line < len(self.text_input)-1:
self.cursor_line += 1
print("cursor going DOWN to {}".format(self.cursor_line))
if event.key == pl.K_RETURN:
self.text_input.insert(self.cursor_line+1, pygame_textinput.TextInput())
self.cursor_line += 1
for line in self.text_input:
print(line.input_string)
试图调试它似乎表明pygame.event.get()
队列正在以比它应该的方式接收更多的KEYDOWN
事件;按下按钮发送多个(有时是正在进行的)事件。我是pyplay的新手,但我很确定这不应该发生在KEYDOWN
事件中,对吗?每次按下一个键只应该触发一个事件。我到底做错了什么?这是pyplay本身的错误吗?
谢谢你能提供的帮助。我对这方面还不太熟悉,我希望我的问题是正确的。
看看你在问题中链接的pygame_textinput
模块:
# Update key counters:
for key in self.keyrepeat_counters:
self.keyrepeat_counters[key][0] += self.clock.get_time() # Update clock
# Generate new key events if enough time has passed:
if self.keyrepeat_counters[key][0] >= self.keyrepeat_intial_interval_ms:
self.keyrepeat_counters[key][0] = (
self.keyrepeat_intial_interval_ms
- self.keyrepeat_interval_ms
)
event_key, event_unicode = key, self.keyrepeat_counters[key][1]
pygame.event.post(pygame.event.Event(pl.KEYDOWN, key=event_key, unicode=event_unicode))
如您所见,是TextInput
的update
方法通过将关键事件再次发布到pygame的事件队列来重复这些事件。
我遇到了一个奇怪的JavaScript问题。我正在开发一个使用键盘输入的HTML5画布游戏。游戏的双人模式需要按住键盘上最多6个键。 在我按住键盘上的4或5个键后,似乎停止调用“keyDown”事件。 我使用的代码如下: 控制台应该为我按下的每个键记录一个键代码。然而,它似乎只报告我按住的前4或5个键的密码。这导致了当两个玩家按下太多键时,我的游戏的双玩家版本的控件无法工作。 这是一个bug,是J
嗨,在用pygame开发游戏时,有一个问题其实并不重要,但它一直困扰着我一段时间。 所以上面是一个工作代码,我相信 同样有效。 然而,当我只是尝试类似“event.key==pyplay。K_RIGHT:",python给我一个错误,说没有属性'key'。虽然我知道选择以上2个代码会更合理,而不仅仅是“event.key==pyplay。K_RIGHT:",我不知道为什么pyplay会说事件没有属
谁能解释一下为什么numpad keyup和keydown事件返回不同的键值? 考虑一下这个: 我本来以为每个事件都会为键降和键增返回相同的键值,但相反,我得到了下面的输出(在按0,1,2,8和9之后): 按键:代码:96,按键:0<br>按键:代码:96,按键` keydown:代码:97,密钥:1 keyup:代码:97,密钥:a 向下键:代码:98,键:2 向上键:代码:98,键:b 按键:
我发现了很多相关的问题(这里和其他地方),但没有具体找到这个问题。 我正在尝试侦听箭头键(37-40)的键关闭事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“keydown”事件。 示例:http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html 在该页面上,单击“在此处键入 - 但是,如果我做同样的事情,但
我使用JQuery来处理我游戏中的所有按键,我的事件处理得很好,但我想限制玩家,因为如果他们按下一个键并按住它,它不会继续发射。 这是我当前的代码: 有人知道如何实现这样的东西吗?我找不到这样的东西。。。
问题内容: 我一直在尝试使用python编写小型2D游戏的代码。 所有这些都在循环内运行。基本上,每按一次箭头键,方向指示器dir_就会更改,它将在检查点编号上加1并将当前对象的当前头部位置(在索引位置插入该头部对象。)但是,不幸的是,所有这些点都是最新的。该列表是实现我的逻辑的重要因素。 在start时,这是when是2,when循环正在开始另一个迭代(取自创建的日志文件)。所有要附加的点都在上