gpt4 book ai didi

python - 如何让敌人跟随pygame中的玩家?

转载 作者:行者123 更新时间:2023-11-28 20:46:58 24 4
gpt4 key购买 nike

我制作了游戏的一部分。它运行良好,但我想在我的游戏中添加敌人。到目前为止,我在 pygame Sprite 中添加了敌人的图像。
但是如何让敌人跟随玩家呢?我试过这样做,但它只是让敌人的形象直接出现在玩家面前:

def moveEnemy(self):
enemies.rect.x = player.rect.x
enemies.rect.y = player.rect.y
all_sprites_list.add(enemies)
enemies_list.add(enemies)

我认为这会让敌人的形象跟随玩家。相反,它只是与玩家的图像重叠。

虽然我阅读了许多 pygame Sprite 示例,但这些示例说要用 enemies.rect.x = -5 替换 enemies.rect.x = player.rect.x > 或与之相关的东西。我也试过这个,但它只是将图像向上移动而不是跟随播放器。

我必须制定一个方程式吗?如果是这样,我不知道该怎么做。
我如何让敌人移动,同时让它跟随玩家?有人可以帮我解决这个问题吗?

如有任何帮助,我们将不胜感激。

最佳答案

您需要通过改变敌人的位置来缩短敌人与玩家之间的距离。这可以通过找到它们的位置之间的差异然后使用该向量计算 normalized 来完成。 (单位长度)方向向量。这样,通过将其速度乘以方向矢量添加到它来改变敌人的位置。

实现此目的的一种方法是将如下所示的方法添加到您的 Enemy 类中。可以使用内置的 math 模块或 pygame.math 模块来完成数学运算。后者还支持 2D Vector2 类,因此它可能是实际使用的更好的类。

import math
import pygame
from pygame.locals import *

class Enemy(object):
...
def move_towards_player(self, player):
# Find direction vector (dx, dy) between enemy and player.
dx, dy = player.rect.x - self.rect.x, player.rect.y - self.rect.y
dist = math.hypot(dx, dy)
dx, dy = dx / dist, dy / dist # Normalize.
# Move along this normalized vector towards the player at current speed.
self.rect.x += dx * self.speed
self.rect.y += dy * self.speed

# Same thing using only pygame utilities
def move_towards_player2(self, player):
# Find direction vector (dx, dy) between enemy and player.
dirvect = pygame.math.Vector2(player.rect.x - self.rect.x,
player.rect.y - self.rect.y)
dirvect.normalize()
# Move along this normalized vector towards the player at current speed.
dirvect.scale_to_length(self.speed)
self.rect.move_ip(dirvect)

您将需要添加检查以确定敌方对象是否会过冲并因此在玩家移动该距离时沿途击中玩家,并做出相应 react 。提示:只要要移动的量——速度矢量的长度,即物体的速度——大于或等于它们之间的距离,就会发生碰撞。

关于python - 如何让敌人跟随pygame中的玩家?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20044791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com