我正在尝试实现一个AI以解决一个简单的任务:从A移到B,同时避免障碍。
到目前为止,我已经使用pymunk
和pygame
来构建环境,并且效果很好。但是现在我面临下一步:要获得我的强化学习算法的奖励,我需要检测玩家与墙壁之间的碰撞。或者只是在碰到墙壁/障碍物时重新启动环境。
设置c_handler.begin
功能等于Game.restart
功能可以帮助我打印出玩家实际上击中了东西。
但是除了print()
之外,我无法访问任何其他与玩家位置有关的功能,而且我真的不知道下一步该怎么做。
那么我该如何使用pymunk碰撞重新启动环境?还是有其他重置方式甚至其他库来构建适当的环境?
def restart(self, arbiter, data):
car.body.position = 50, 50
return True
def main(self):
[...]
c_handler = space.add_collision_handler(1,2)
c_handler.begin = Game.restart
[...]
答案 0 :(得分:0)
通常来说,阅读一下类在python中的工作方式,特别是类实例变量的工作方式,似乎对您很有用。
无论如何,如果您已经知道要操纵car变量,则可以将其存储在类本身中。然后,由于您可以在重新启动方法中使用自助服务,因此您可以在那里执行任何操作。
或者,另一个选择是从传递给回调的仲裁器中找出要更改的主体。
选项1:
class MyClass:
def restart(self, space, arbiter, data):
self.car.body.position = 50,50
return True
def main(self):
[...]
self.car = car
c_handler = space.add_collision_handler(1,2)
c_handler.begin = self.restart
[...]
选项2:
def restart(space, arbiter, data):
arbiter.shapes[0].body.position = 50,50
# or maybe its the other shape, in that case you should do this instead
# arbiter.shapes[1].body.position = 50,50