以下是带优先级的抖动部分的代码:

class Wander(Jitter):

    def __init__(self, agent, jitter=20.0, radius=10.0, distance=50.0, priority=1):
        Jitter.__init__(self, agent, jitter)
        self.radius = radius
        self.distance = distance
        self.target = None
        self.priority = priority

    def calculate(self):
        if self.target is None:
            self.target = Point2D(randint(-1, 1) * self.radius, randint(-1, 1) * self.radius)
        else:
            if self.agent.position.distance(self.target) < self.distance:
                self.target = Point2D(randint(-1, 1) * self.radius, randint(-1, 1) * self.radius)

        desired_velocity = (self.target - self.agent.position).normalize() * self.agent.max_speed
        return desired_velocity - self.agent.velocity

这里定义了一个名为Wander的类,它继承自Jitter类。Wander类有四个属性:jitter(随机抖动的幅度)、radius(抖动的半径)、distance(目标点和当前位置之间的最小距离)和priority(行为的优先级)。Wander类重写了calculate函数,实现了巡游行为。在函数中,如果目标点为None,则随机生成一个目标点;如果当前位置和目标点之间的距离小于distance,则重新生成一个目标点。然后,计算出期望速度,并返回期望速度与当前速度的差值,作为该行为的操纵力。

Buckland_Chapter3-Steering Behaviors: Wander Behavior with Priority in Python

原文地址: https://www.cveoy.top/t/topic/nT3B 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录