在 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 值
有办法解决这个问题吗?
尝试使用复杂的位置进行碰撞。屏幕中的机器人冻结并没有移动