我是一名新手编码员,正在编写一个 Python 程序来使用 Pygame 库模拟自然选择。
我想要完成的事情之一是使重叠的移动椭圆形(或者如果这太复杂,则为矩形)对象产生继承其特征的子对象。
我的问题是我无法创建工作代码来识别任何两个对象区域何时重叠。我需要代码来识别两个对象何时交叉路径(并暂时重叠),以便游戏知道生成另一个形状。
有一次,我尝试了一种复杂的嵌套 for 循环,我认为它可以工作,但这导致模拟崩溃。
这是我的代码:
import pygame, random
# Define some colors
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
pygame.init()
# Set the width and height of the screen
map_width = 800
map_height = 800
size = [map_width, map_height]
screen = pygame.display.set_mode(size)
# Display name
pygame.display.set_caption("Natural Selection Game")
# Loop until the user clicks the close button.
done = False
# Used to manage how fast the screen updates
clock = pygame.time.Clock()
# -------- Organism -----------
class Organism:
def __init__(self):
# Speed and direction
self.change_x = random.randrange(0,6)
self.change_y = random.randrange(0,6)
# Dimensions
self.width = random.randrange(5,50)
self.height = random.randrange(5,50)
# Diet (WIP)
self.color = random.choice([red, green, blue])
# Starting position
self.x = random.randrange(0 + self.width, 800 - self.width)
self.y = random.randrange(0 + self.height, 800 - self.height)
# Spawn
def spawn(self, screen):
pygame.draw.ellipse(screen, self.color, [self.x, self.y, self.width, self.height])
# Initiate movement
def move(self):
self.x += self.change_x
self.y += self.change_y
# Bounce
def bounce(self, map_width, map_height):
if self.x < 0 or self.x > map_width - self.width:
self.change_x = self.change_x * -1
if self.y < 0 or self.y > map_height - self.height:
self.change_y = self.change_y * -1
# Initial spawning conditions
org_list = []
org_number = 15
for i in range(0,org_number):
org = Organism()
org_list.append(org)
# -------- Main Program Loop -----------
while not done:
# ---- Event Processing ----
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
# ---- Logic ----
# Movement
for i in org_list:
i.move()
i.bounce(map_width, map_height)
# Reproduction
# ---- Drawing ----
# Set the screen background
screen.fill(white)
# Spawn organisms
for i in org_list:
i.spawn(screen)
# --- Wrap-up
# Limit to 60 frames per second
clock.tick(60)
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# Close everything down
pygame.quit()
任何见解将不胜感激。
最佳答案
您应该使用pygame.Rect保持位置和大小,然后你可以使用 Pygame 函数来检查碰撞。
one_rect.colliderect(second_rect)
one_rect.coolidepoint(mouse_position)
查看文档中的其他函数 pygame.Rect
<小时/>Pygame 还有 pygame.sprite.Group保留一组 Sprite 并检查所有 Sprite 的碰撞。
关于python - 如何测试区域是否重叠 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41003640/