Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-无法在类中获取2个方法来共享数据_Python_Pygame - Fatal编程技术网

Python-无法在类中获取2个方法来共享数据

Python-无法在类中获取2个方法来共享数据,python,pygame,Python,Pygame,我正在尝试python/pygame 我制作了一个简单的播放器类 class Player(): def __init__(self): self.posx = 10 self.posy = 20 def render (self): pygame.draw.rect(screen,(255,0,0), (self.posx,self.posy,100,100)) def walk (self): self.posx += 10 渲染功能: d

我正在尝试python/pygame

我制作了一个简单的播放器类

class Player():
  def __init__(self):
    self.posx = 10
    self.posy = 20


  def render (self):
    pygame.draw.rect(screen,(255,0,0), (self.posx,self.posy,100,100))

  def walk (self):
    self.posx += 10
渲染功能:

def render():
  player = Player()
  player.walk()
  player.render()
循环:

running = True
while running:
  render()
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = False
我假设这段代码会在每一帧的x位置上增加10个像素。但它会在第一次渲染时将位置更新为20,并保持不变


我尝试打印值,但它确实打印了漫游和渲染中的每一帧,因此循环工作正常,那么为什么位置没有得到更新?

您在每次调用
渲染时都在创建实例

player = Player()
def render(player): 
  player.walk()
这应该更好地发挥作用:

running = True
player = Player()

while running:
  render(player)
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = False
编辑:
正如timgeb在现已删除的帖子中指出的,render方法是完全不需要的。我把它留给了OP,让他更清楚地了解自己的原始代码风格。

在每次调用
render
时,您都在重新创建实例

player = Player()
def render(player): 
  player.walk()
这应该更好地发挥作用:

running = True
player = Player()

while running:
  render(player)
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = False
编辑:
正如timgeb在现已删除的帖子中指出的,render方法是完全不需要的。我留下它是为了让OP更清楚地了解他的原始代码风格。

我看不到循环。嗯,是的,我留下了它,因为它对我来说似乎不相关。但是我现在添加了它,你可以在每次迭代中创建一个新的播放器。从而重置坐标。你需要在
render
函数之外创建播放器。render方法每次从一开始就重新创建播放器的实例。我看不到循环。嗯,是的,我忽略了它,因为它似乎与我无关。但是我现在添加了它,你可以在每次迭代中创建一个新的播放器。从而重置坐标。你需要在
render
函数之外创建播放器。render方法每次从头开始都会重新创建播放器的实例是的,我删除了我的,因为你的速度快了一点,我的帖子没有添加太多内容。好吧,你第三十二秒的额外思考让我在我的示例帖子中发现了一个bug,并明确表示不需要这种方法。无论如何,谢谢你分享你的帖子。是的,我删除了我的帖子,因为你的速度快了一点,我的帖子没有添加太多。好吧,你的第三十二个额外思考让我在我的示例帖子中发现了一个bug,并明确表示不需要该方法。谢谢分享你的帖子。