我正在制作一个2人迷宫跑者游戏,我遇到了一些键盘事件的麻烦。如果两个玩家同时击中一个键,只有玩家1移动,因为我的代码首先测试的是Player1的事件。在python和pygame中是否有一种方法可以同时检查这两个事件?下面是我的player1课的一部分:
class Player( pygame.sprite.Sprite ):
def __init__( self ):
super( Player, self ).__init__()
self.size = self.w,self.h = 75,75
self.image = pygame.Surface( ( self.size ) )
self.image.fill( white )
self.rect = self.image.get_rect()
self.move_y = 0
self.move_x = 0
self.speed = 5
self.player = True
self.alive = True
self.level = None
def update( self, collidable = pygame.sprite.Group(), event = None ):
self.rect.x += self.move_x
self.rect.y += self.move_y
if not ( event == None ):
if ( event.type == pygame.KEYDOWN ):
if ( event.key == pygame.K_LEFT ):
self.move_y = 0
self.move_x = -self.speed
if ( event.key == pygame.K_RIGHT ):
self.move_y = 0
self.move_x = self.speed
if ( event.key == pygame.K_UP ):
self.move_x = 0
self.move_y = -self.speed
if ( event.key == pygame.K_DOWN ):
self.move_x = 0
self.move_y = self.speed
很抱歉出现了代码块,但这对您理解它是如何工作的都是必要的。我为Player2提供了一个几乎相同的类,但使用了不同的键盘控制(WASD而不是箭头键)。
我定义了player1和player2类:
player_object_list = pygame.sprite.Group()
p1 = Player()
p1.set_position( 40, 725 )
p1.set_image(deadpool_icon)
p2 = Player2()
p2.set_position( 525, 725 )
p2.set_image(girl_bow)
然后我更新并绘制它们:
p1.update( current_level.object_list, event )
p2.update( current_level.object_list, event )
event = None
player_object_list.draw( window )
总结一下:使用这段代码,键盘控制的移动运行良好,但它不会同时检查两个玩家的键盘事件,因此如果两个玩家同时按下一个键,只有player1检测到该事件,因为它在Player2之前更新:
p1.update( current_level.object_list, event )
p2.update( current_level.object_list, event )
记住我上面的评论,让我们尝试一下解决方案。首先,我想让您的代码更通用一点,也许更容易理解:使用一个查找表来进行移动翻译。
move_translate = {
pygame.K_LEFT: (-1, 0),
pygame.K_RIGHT: (1, 0),
pygame.K_UP: (0, -1),
pygame.K_DOWN: (0, 1)
}
if event is not None:
if event.type == pygame.KEYDOWN:
if event.key in move_translate:
# dictionary.get() will improve this,
# if you want to advance that far in Python syntax
self.move_x, self.move_y = move_translate[event.key]
self.move_x *= self.speed
self.move_y *= self.speed
# Here, you have to retire the event you just processed.
# Then pass out of the first check for no event.
# Check for another in the event queue, for player 2.
# After this check, you can update the display.
这会让你走向一个解决方案吗?根据您使用的队列和交互,您可能能够将事件检查放入一个循环中,该循环处理这个时间刻度的所有事件。
我试图测试自己理解递归的能力,所以我给自己一个任务,在递归中做跳跃游戏练习 给定一个非负整数数组,您最初位于数组的第一个索引处。数组中的每个元素代表该位置的最大跳转长度。你的目标是在最小的跳跃次数内达到最后一个指数。 https://leetcode.com/problems/jump-game-ii/ 我试图修改这部分代码,但它没有出现在调试器上,因此我没有真正看到这部分代码中的问题 如果有人能
在这个程序中,用户必须想出一个数字,然后让计算机来猜。 2.我试过这个程序,但电脑的猜测很奇怪。计算机不会根据我的指南猜出一个数字。
我试图在我的应用程序中有一个无限滚动的部分。为了实现这一点,我使用这个组件来处理滚动事件等等。当滚动到达div的底部时,我调用一个函数来获取更多数据。到现在为止,一直都还不错。 为了使这个函数更有效,我试图在调用之前等待几秒钟,并确保数据得到正确处理。为此,我一直在查看Angular网站上展示的维基百科搜索示例。 我有一个类似于本文所示的设置,我的问题是调用时出现以下错误:
我 们已经映射了一个持久化实体类到表上。让我们在这个基础上增加一些类之间的关联。首先我们往应用程序里增加人(people)的概念,并存储他们所参与的 一个 Event 列表。(译者注:与 Event 一样,我们在后面将直接使用 person 来表示“人”而不是它的中文翻译) 1.2.1. 映射 Person 类 最初简单的 Person 类: package org.hibernate.tutor
问题内容: 欢迎, Hibernate映射存在一些问题。 数据库结构: POJO结构: 我想拥有的是TableC Pojo映射中TableB元素的集合,映射键是tableA。 该集合应该是只读的。 映射应为hbm而非注释。 我可能已经以各种可能的方式完成了此操作…我遇到的关闭情况是,当我对一个TableC对象进行操作时,一切都是正确的,但是如果我加载它们的集合,则只有最后一个具有正确的集合集。 更
想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。 我所拥有的是, 我想要的是, 其中,