Пример #1
0
    def update(self):
        self.vel = v2.addVects(self.vel, self.accel)
        self.pos = [
            self.pos[0] + self.vel.components[0],
            self.pos[1] + self.vel.components[1]
        ]
        self.angle = self.vel.getAngle()
        self.image = pygame.transform.rotate(self.original, self.angle)
        self.rect = self.image.get_rect(center=self.pos)
        DispSurface.blit(self.image, self.rect)

        #This code is for screen wrapping of boids when we are not destroying them for going out of the screen
        # if self.pos[0] > width:
        #     self.pos[0] = self.pos[0] - width
        # if self.pos[0] < 0:
        #     self.pos[0] = width - self.pos[0]
        # if self.pos[1] > height:
        #     self.pos[1] = self.pos[1] - height
        # if self.pos[1] < 0:
        #     self.pos[1] = height - self.pos[1]

        if self.vel.getMag() > maxSpeed:
            self.vel.setMag(maxSpeed)
        if self.accel.getMag() > maxAccel:
            self.accel.setMag(maxAccel)
Пример #2
0
        for others in tempBoids:
            x1, y1 = me.pos
            x2, y2 = others.pos
            if (x1 - x2)**2 + (y1 - y2)**2 < radius**2:
                proximity.append(others)
        me.proximity = proximity

        #if there is anything in the boid's proximity, it Tries to align, avoid bumping, and generally move towards mean position
        if me.proximity:
            #alignment with direction of other boids
            sum_an1 = 0
            sum_an2 = 0
            for x in me.proximity:
                remVel = v2.Vector()
                remVel.setVectorC(0, 0)
                remVel = v2.addVects(remVel, x.vel)
                if remVel.getMag():
                    remVel.setMag(1 / remVel.getMag())
                sum_an1 += remVel.components[0]
                sum_an2 += remVel.components[1]
            sum_an1 /= len(me.proximity)
            sum_an2 /= len(me.proximity)
            angVector = v2.Vector()
            angVector.setVectorC(sum_an1, sum_an2)
            me.avgAngle = angVector.getAngle()  #Average angle for neighbors
            me.accel.setVectorA(me.avgAngle, 1)

            #seperation
            me_post = (me.pos[0], me.pos[1])
            pos_VectMe = v2.Vector()
            pos_VectMe.setVectorC(me_post[0], me_post[1])