那么为什么这个Pygame移动代码工作,但不是这个?

时间:2013-12-02 01:51:41

标签: python image animation python-2.7 pygame

所以我有这两个代码块,这两个代码块都是为了将​​甲壳虫NPC围绕一个屏幕移动而设计的。

第一个工作正常。

    ##beetle moving code
if beetle_list[0].rect.x == 400:
    beetle_list[0].speedChange(0,-5)
    beetle_list[0].update()
    beetle_list[0].speedChange(0, 5)
if beetle_list[0].rect.y == 100:
    beetle_list[0].speedChange(5,0)
    beetle_list[0].update()
    beetle_list[0].speedChange(-5,0)
if beetle_list[0].rect.x == 600:
    beetle_list[0].speedChange(0, 5)
    beetle_list[0].update()
    beetle_list[0].speedChange(0, -5)
if beetle_list[0].rect.y == 200:
    beetle_list[0].speedChange(-5,0)
    beetle_list[0].update()
    beetle_list[0].speedChange(5,0)

简而言之,它会检查窗户上甲虫的位置,并相应地移动它。

现在,这是我的原始代码,DID不起作用:

if beetle_list[0].rect.x == 400 and beetle_list[0].rect.y == 200:
    beetle_list[0].speedChange(0,-5)
    beetle_list[0].update()
    beetle_list[0].speedChange(0, 5)
if beetle_list[0].rect.y == 400 and beetle_list[0].y == 100:
    beetle_list[0].speedChange(5,0)
    beetle_list[0].update()
    beetle_list[0].speedChange(-5,0)
if beetle_list[0].rect.x == 600 and beetle_list[0].y == 100:
    beetle_list[0].speedChange(0, 5)
    beetle_list[0].update()
    beetle_list[0].speedChange(0, -5)
if beetle_list[0].rect.x == 600 and beetle_list[0].y == 200:
    beetle_list[0].speedChange(-5,0)
    beetle_list[0].update()
    beetle_list[0].speedChange(5,0)

两者之间的区别在于后者也检查y坐标。但是甲虫永远不会移动。那是为什么?

以下是甲壳虫类中的speedChange和update def以供参考:

def speedChange(self,x,y):
    self.x_speed += x
    self.y_speed += y

def update(self):
    self.rect.x += self.x_speed
    self.rect.y += self.y_speed

请注意,x_speed和y_speed是Beetle类中的int变量,用于确定设定方向的速度。

1 个答案:

答案 0 :(得分:2)

第二个版本受到更多限制 - 只有4个点可以移动甲壳虫。

(400,200), (400,100), (600,200), (600,100)

在第一个版本中,有数百个点可以移动甲壳虫。

(400,0)...(400,screen_height)(600,0)...(600,screen_height) - 垂直线

(0,100)...(screen_width,100)(0,200)...(screen_width,200) - 水平线

因为Beetle在5像素之后停止:

  • 在第二个版本中 - 在第一次移动之后甲壳虫不在另外4个点之一 移动。
  • 在第一个版本中 - 甲壳虫仍在垂直/水平线上,它可以再次移动。