Python 敌人的举动是错误的,为什么?
我想用pygame创建一个宇宙飞船游戏。我想这样做: 第一个敌人移动x坐标,敌人x坐标在x向右移动时增加 如果敌方坐标x>=WIDHT,敌方坐标y+=5,敌方x坐标在x向左移动时减小Python 敌人的举动是错误的,为什么?,python,pygame,Python,Pygame,我想用pygame创建一个宇宙飞船游戏。我想这样做: 第一个敌人移动x坐标,敌人x坐标在x向右移动时增加 如果敌方坐标x>=WIDHT,敌方坐标y+=5,敌方x坐标在x向左移动时减小 如果敌人坐标x尝试移除你的移动功能,并在while循环中使用此功能替换: enemy.x += enemy_vel if enemy.x >= WIDTH - ENEMY_IMAGE.get_width() or enemy.x <= 0: enemy_vel *= -1 enemy_y
如果敌人坐标x尝试移除你的移动功能,并在while循环中使用此功能替换:
enemy.x += enemy_vel
if enemy.x >= WIDTH - ENEMY_IMAGE.get_width() or enemy.x <= 0:
enemy_vel *= -1
enemy_y += 5
尝试删除移动功能,并在while循环中将其替换为:
enemy.x += enemy_vel
if enemy.x >= WIDTH - ENEMY_IMAGE.get_width() or enemy.x <= 0:
enemy_vel *= -1
enemy_y += 5
穿过敌人,在你的头脑中移动算法。所以敌人的x位置是684,速度被减去,剩下的x是679。下一次迭代,x回到<684,因此速度被相加,将x移回到684。它撞到了侧面。而且Y每一步都在增加。也许这是故意的,但它会沿对角线移动敌人的物体。在你的头脑中穿过敌人。移动算法。所以敌人的x位置是684,速度被减去,剩下的x是679。下一次迭代,x回到<684,因此速度被相加,将x移回到684。它撞到了侧面。而且Y每一步都在增加。也许这是故意的,但它会使敌人的物体斜向移动。这个答案是正确的,但最好能解释一下目前的错误,以及这个改变是如何解决这个问题的。谢谢你这么多的朋友。现在我非常高兴:@Kingsley你的右边,我来解释一下:首先,敌人的速度是5,所以x坐标向右移动了5个像素。在if语句中,它询问x坐标是大于宽度还是小于0。如果这是真的,那么你将速度乘以-1,因为这会产生相反的速度。最后,将y坐标加上5。@Softwareprogrammer94很高兴我能提供帮助:这个答案是正确的,但最好能解释一下当前的错误,以及这个更改是如何解决这个问题的。感谢这么多的朋友,它可以工作。现在我非常高兴:@Kingsley你的右边,我来解释一下:首先,敌人的速度是5,所以x坐标向右移动了5个像素。在if语句中,它询问x坐标是大于宽度还是小于0。如果这是真的,那么你将速度乘以-1,因为这会产生相反的速度。最后,将5添加到y坐标。@Softwareprogrammer94很高兴我能提供帮助:
class Ship:
def __init__(self, x, y):
self.x = x
self.y = y
self.ship_img = None
def draw(self, window):
window.blit(self.ship_img, (self.x, self.y))
def get_width(self):
return self.ship_img.get_width()
def get_height(self):
return self.ship_img.get_height()
class Player(Ship):
def __init__(self, x, y):
super().__init__(x, y)
self.ship_img = PLAYER_IMAGE
self.mask = pygame.mask.from_surface(self.ship_img)
def draw(self, window):
super().draw(window)
class Enemy(Ship):
def __init__(self, x, y):
super().__init__(x,y)
self.ship_img = ENEMY_IMAGE
self.mask = pygame.mask.from_surface(self.ship_img)
def move(self, vel):
self.x += vel
if self.x >= 684:
self.x -= vel
self.y += 5
elif self.x <= 0:
self.x += vel
self.y += 5
def main():
run = True
FPS = 60
clock = pygame.time.Clock()
player = Player(350, 500)
player_vel = 8
enemy = Enemy(350, 100)
enemy_vel = 5
def redraw_window():
WIN.blit(BG_IMAGE,(0,0))
player.draw(WIN)
enemy.draw(WIN)
pygame.display.update()
while run:
clock.tick(FPS)
redraw_window()
enemy.move(enemy_vel)
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT] and player.x + player_vel + player.get_width() < WIDTH:
player.x += player_vel
if keys[pygame.K_LEFT] and player.x - player_vel > 0:
player.x -= player_vel
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
main()
enemy.x += enemy_vel
if enemy.x >= WIDTH - ENEMY_IMAGE.get_width() or enemy.x <= 0:
enemy_vel *= -1
enemy_y += 5