【问题标题】:So why did this Pygame move code work, but not this one?那么为什么这个 Pygame 移动代码有效,而这个无效呢?
【发布时间】:2013-12-17 15:35:46
【问题描述】:

所以我有这两个代码块,这两个代码块都是为了让甲虫 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)

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

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

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 变量,用于确定设定方向的速度。

【问题讨论】:

  • 在第二个代码的第一行检查你的:。 (可能是错字)
  • 这是一个错字。我在测试代码时注释掉了后半部分,这就是我找到解决方案的方式。当我将其粘贴到此处时,我删除了评论,但忘记了这一点。感谢您指出。
  • 第二个sn-p中的第二个if。也许您的意思是beetlelist[0].x 而不是beetlelist[0].y

标签: python image animation python-2.7 pygame


【解决方案1】:

第二个版本限制更多——甲壳虫只有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 点之一中进行另一个 移动。
  • 在第一个版本中 - 甲壳虫仍在垂直/水平线上,它可以进行另一次移动。

【讨论】:

  • 哦。呃。这应该是显而易见的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
相关资源
最近更新 更多