2013-11-23 72 views
0

我想通过使用向上和向下的箭头在Pong游戏中移动一个桨。我通过一个事件处理循环来做这件事。下面是事件处理循环的代码:Pygame雪碧没有更新

for event in PE.get(): 
     if event.type == PG.KEYDOWN: 
      keystate = PG.key.get_pressed() 
      if event.key == PG.K_ESCAPE: 
       done = True 
      if keystate[PL.K_UP]: 
       rightPaddle.update(-10) 
      if keystate[PL.K_DOWN]: 
       rightPaddle.update(10) 
     if event.type == PG.QUIT: 
      done = True 

更新功能如下所示:

def update(self, move): 
     self.toplefty += move 

这里是PaddleSprite类:

def __init__(self, x, y): 
     PG.sprite.Sprite.__init__(self) 
     self.image = PG.Surface([15,100]) 
     self.topleftx = x 
     self.toplefty = y 
     self.rect = self.image.get_rect 
     self.rect.move_ip(self.topleftx, self.toplefty) 

    def draw(self, surface): 
     surface.fill(PINK, self.rect) 

    def update(self, move): 
     self.toplefty += move 

简而言之,更新基本上是矩形的桨的函数根据点击向上或向下箭头的次数将矩形的左上角移动到新的y位置。每个向上或向下箭头在正方向或负方向上递增桨距10。但是,在我的程序中,当我向上或向下按下时,桨没有移动。谁能告诉我为什么?此外,在按住向上或向下键的同时,是否可以移动桨叶,而不是多次按下它来移动桨叶?

+0

您可以发布完整程序的源代码吗? –

+0

到目前为止您尝试了哪种调试?事件处理程序中的任何打印语句,以验证是否已达到坐标调整逻辑? –

+0

我在事件驱动的循环中添加了打印语句,以查看它是否会识别键和键的事件。当我按下按键时它会打印出来,但桨不会移动,这非常令人困惑。 –

回答

1

看起来您已经组合了2种检查输入的方式。他们似乎有冲突。 让我们一起来看看:

for event in PE.get(): 

这就是所谓的事件循环,什么pygame的呢,是商店已发生的所有事件的输入队列中,一个get(),从队列弹出值。其他方法是PG.key.get_pressed()

这是更多的硬件方法,因为它返回一组按钮状态。

要解决这个问题,我建议删除get_pressed()调用以及keystate []检查,并用event.key == PG.K_UP替换它们。

编辑:

看来你的错误是设定self.toplefty的变量,但使用self.rect绘制。您应该使用self.rect.move_ip来更新,以便它移动实际的矩形。

+0

我做了更改,但桨仍然不动。我在事件处理循环中放置了打印语句,以查看它是否识别我是按下向上键还是向下键。这意味着它可能与我的update()方法有关,但我不确定它有什么问题 –

0

以下是我得到它的工作:

def update(self, move): 
     self.rect.centerx += 0 
     self.rect.centery += move 

从本质上讲,这个问题必须是与更新,因为事件驱动循环的认可或我按上下。所以我刚刚得到了精灵的Rect对象并将它的中心移动到垂直轴上。感谢所有评论或回答的人!