python - 如何保持精灵的方向?
问题描述
我正在尝试进行模拟。
我的兔子应该是随机移动的,但我希望它们保持相同的方向移动更长时间,因此,为什么我使用if randomnum == 1
, 只改变方向 1/10 次。
但是当我运行代码时,兔子似乎每一步都会改变方向。我究竟做错了什么?
兔子构造函数
class Rabbit(pygame.sprite.Sprite):
def __init__(self,x,y):
super().__init__()
self.image = pygame.Surface([10,10])
self.image.fill(BLUE)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.xchange = 0
self.ychange = 0
self.hp = 100
兔子搬运工
for rabbit in rabbits:
randomnum = random.randint(1,10)
if randomnum == 1:
xdir = random.randint(-5,5)
ydir = random.randint(-5,5)
rabbit.xchange = xdir
rabbit.ychange = ydir
else:
continue
if rabbit.rect.x+xdir > 10 and rabbit.rect.x+xdir < 390 and rabbit.rect.y+ydir > 10 and rabbit.rect.y+ydir < 390:
rabbit.rect.x += rabbit.xchange
rabbit.rect.y += rabbit.ychange
else:
continue
解决方案
这是continue
. 他们跳过了循环体的其余部分,这里不需要:
- 在第一个中,
if
只要兔子的方向没有改变,它也不会移动,continue
跳过第二个if
并继续下一个兔子 - 在第二个
if
中, continue 只是让循环继续到下一个兔子,无论如何它都会这样做
修复:删除它们。
for rabbit in rabbits:
randomnum = random.randint(1,10)
if randomnum == 1:
xdir = random.randint(-5,5)
ydir = random.randint(-5,5)
rabbit.xchange = xdir
rabbit.ychange = ydir
if rabbit.rect.x+xdir > 10 and rabbit.rect.x+xdir < 390 and rabbit.rect.y+ydir > 10 and rabbit.rect.y+ydir < 390:
rabbit.rect.x += rabbit.xchange
rabbit.rect.y += rabbit.ychange
评论:
- 兔子可能会在场地边界停留更长时间,如果这看起来很奇怪,您可以扩展随机化部分并检查兔子是否在边界处,并生成 -5...0 或 0...5 之间的方向只要
- 更新这两个位置可以分为两个
if
-s:仅仅因为兔子到达屏幕的左侧,它不必完全停止移动(y坐标仍然可以更新)。
推荐阅读
- python - 如何减少此代码的长度?
- c++ - 如何在虚幻中使用画圆
- android - 无法覆盖启动器图标
- open-policy-agent - 开放策略代理返回的 json 响应的测试属性与 opa 测试
- reactjs - React 功能组件 - 对处理程序使用内联函数会影响性能?
- opengl - 同时使用 glUniform 和绑定 UBO
- php - Ajax 不在实时服务器上加载帖子,而是在本地主机上工作
- javascript - 如何在 vue 中使用生成的 HTML?
- scala - Scala 隐式
- python-3.x - 使用 python 与过滤列进行比较时,从列表中取出奇数