以复数为坐标的碰撞

问题描述 投票:0回答:0

在 Python 中,这可能吗?

我的类 boid 代码,与其他 2 个类发生碰撞(不使用复杂坐标):

Boid 类(pygame.sprite.Sprite):

        def __init__(self):
            super().__init__()
            self.image = pygame.transform.flip(boid_img, True, False)
            self.x = (random.randint(0, screenwidth - boid_img.get_width()))
            self.y = (random.randint(0, screenheight - boid_img.get_height()))
            self.rect = pygame.rect.Rect(self.x, self.y, self.image.get_width(),      `  ``your text```self.image.get_height())
            self.old_rect = self.rect.copy()
            self.speed = random.uniform(0.02, 0.12)
            self.direction = pygame.math.Vector2((0,1))
        
        def update(self):
            self.old_rect = self.rect.copy()
            self.x = self.x + self.speed
            self.y = self.y + self.speed
            self.rect.x = self.x
            self.rect.y = self.y
            if self.x < 0:
                self.speed = abs(self.speed)
                self.image = pygame.transform.flip(self.image, True, False)
            if self.x > screenwidth - self.image.get_width():
                self.speed = -abs(self.speed)
                self.image = pygame.transform.flip(self.image, True, False) 
            if self.y < 0:
                self.speed = abs(self.speed)
                self.image = pygame.transform.flip(self.image, False, True)
            if self.y > screenheight - self.image.get_height():
                self.speed = -abs(self.speed)
                self.image = pygame.transform.flip(self.image, False, True)
            if self.rect.colliderect(obstacle.rect):
                self.speed = -abs(self.speed)
                self.image = pygame.transform.flip(self.image, False, True)
            if self.rect.colliderect(hoik.rect):
                self.speed = -abs(self.speed)
                self.image = pygame.transform.flip(self.image, False, True)

但是,我想实现这个:

在初始化函数中...:

your text
self.speed = complex(random.randint(0, screenwidth - boid_img.get_width()), random.randint(0, screenheight - boid_img.get_height()))
your text
self.loc = complex(random.randint(0, screenwidth - boid_img.get_width()), random.randint(0, screenheight - boid_img.get_height()))

        def update(self, hoik):
            for boid in boid_group:
                self.x = self.x + self.speed
            self.y = self.y + self.speed
            self.loc += self.speed
            if (self.loc.real < 15):
                self.speed += 0.4+0j
            if (self.loc.real > screenwidth - 15) :
                self.speed += -0.4+0j
            if (self.loc.imag < 15) :
                self.speed += 0+0.4j
            if (self.loc.imag > screenheight - 15) :
                self.speed += 0-0.4j
            for b in boid_group : 
                center = 0+0j
                num_neighbors = 0
            if abs(numpy.subtract(boid.loc, b.loc).any()) < 75 : 
                center += b.loc
                num_neighbors += 1
            if num_neighbors > 0 : 
                center = center / num_neighbors
            boid.loc += numpy.subtract(center, boid.loc) * CENTERING_FACTOR
            for b in boid_group : 
                move = 0+0j
                if not (b is boid) : 
                    if abs(numpy.subtract(boid.loc, b.loc)) < MIN_DISTANCE : 
                        move += numpy.subtract(boid.loc, b.loc)
                        move = 0+0j
                        self.speed += move * AVOID_FACTOR
                avg_speed = 0+0j
                num_neighbors = 0
                for b in boid_group: 
                    if abs(numpy.subtract(boid.loc, b.loc)) < 75 : 
                        avg_speed += b.speed
                        num_neighbors += 1
         
                if num_neighbors > 0:
                    avg_speed = 0+0j
                    avg_speed /= num_neighbors
      
                boid.speed += numpy.subtract(avg_speed, boid.speed) * MATCHING_FACTOR

                boid_group = init_boids()

这与我的 self.rect.Colliderect 以及当前速度函数冲突,因为 colliderect 仅采用 x 和 y 值,而复平面中不存在 y 值

有办法解决这个问题吗?

尝试使用复杂的位置进行碰撞。屏幕中的机器人冻结并没有移动

python numpy pygame collision complex-numbers
© www.soinside.com 2019 - 2024. All rights reserved.