Python pygame精灵的一个实例正在更改整个组

Python pygame精灵的一个实例正在更改整个组,python,pygame,sprite,Python,Pygame,Sprite,只要做一个简单的游戏,让蚂蚁从它们离开的巢穴开始,找到最近的食物,而这些食物并没有被锁定,所以它们每个人都有自己的路径和目标。他们已经这样做了,但每当我实际移动精灵时,该组位置属性中的所有精灵似乎都跟随一只蚂蚁,而不是它们自己的路径 import pygame import settings import random vec = pygame.math.Vector2 class Ant(pygame.sprite.Sprite): def __init__(self, world):

只要做一个简单的游戏,让蚂蚁从它们离开的巢穴开始,找到最近的食物,而这些食物并没有被锁定,所以它们每个人都有自己的路径和目标。他们已经这样做了,但每当我实际移动精灵时,该组位置属性中的所有精灵似乎都跟随一只蚂蚁,而不是它们自己的路径

import pygame
import settings
import random
vec = pygame.math.Vector2


class Ant(pygame.sprite.Sprite):
def __init__(self, world):
    self.world = world
    pygame.sprite.Sprite.__init__(self, self.world.ants, self.world.all_sprites)
    self.image = pygame.Surface((settings.ANT_RADIUS*2, settings.ANT_RADIUS*2))
    self.draw()
    self.rect = self.image.get_rect()
    self.pos = self.world.nest.pos
    self.rect.center = self.pos
    self.in_nest = True
    self.image.set_colorkey((0, 0, 0))
    self.target = False

def update(self):
    if self.in_nest:
        self.try_leave_nest()
    else:
        if self.target != False:
            self.move_to_food()
        else:
            self.target = self.find_food()

def draw(self):
    pygame.draw.circle(self.image, settings.ANT_COLOUR,
                       (settings.ANT_RADIUS, settings.ANT_RADIUS), settings.ANT_RADIUS)

def move_to_food(self):
    self.direction = vec(self.target.pos-self.pos).normalize()
    self.pos += self.direction
    self.rect.center = self.pos
    print(self.pos)

def find_food(self):
    self.closest = settings.WINDOW_WIDTH
    self.closest_food = False
    for food in self.world.food:
        if not food.taken:
            self.distance = self.pos.distance_to(food.pos)
            if self.distance <= self.closest:
                self.closest = self.distance
                self.closest_food = food
    self.closest_food.taken = True
    return self.closest_food

def try_leave_nest(self):
    leave_chance = settings.ANT_LEAVE_CHANCE
    leave_num = random.random()
    if leave_num < leave_chance:
        self.in_nest = False
导入pygame
导入设置
随机输入
vec=pygame.math.Vector2
蚂蚁类(pygame.sprite.sprite):
定义初始(自我,世界):
self.world=世界
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我,自我,世界,蚂蚁,自我,世界,所有精灵)
self.image=pygame.Surface((settings.ANT_RADIUS*2,settings.ANT_RADIUS*2))
self.draw()
self.rect=self.image.get_rect()
self.pos=self.world.nest.pos
self.rect.center=self.pos
self.in_nest=True
self.image.set_colorkey((0,0,0))
self.target=False
def更新(自我):
如果self.in_嵌套:
self.try_leave_nest()
其他:
如果自我设定目标!=错误:
self.move_to_food()
其他:
self.target=self.find_food()
def牵引(自):
pygame.draw.circle(self.image,settings.antu color,
(settings.antu半径,settings.antu半径),settings.antu半径)
def移动到食物(自身):
self.direction=vec(self.target.pos self.pos).normalize()
self.pos+=自我方向
self.rect.center=self.pos
打印(self.pos)
def查找食物(自我):
self.closest=settings.WINDOW\u WIDTH
self.self\u food=False
对于self.world.food中的食物:
如果不是食物,请吃:
自我距离=自我位置距离(食物位置)

如果self.distance
self.pos=self.world.nest.pos

复制对位置对象的引用,而不是对象本身

self.pos+=self.direction


修改在位对象,这意味着
self.world.nest.pos
也被修改。

self.pos=self.world.nest.pos

复制对位置对象的引用,而不是对象本身

self.pos+=self.direction


在原地修改对象,意思是
self.world.nest.pos
也被修改了。

请发布一篇文章。删除重现问题不需要的所有内容,但确保程序仍然可以运行。抱歉,第一篇文章并不能完全确定问题的原因。我们会在以后的帖子中记住这一点。请发布一篇文章。删除重现问题不需要的所有内容,但确保程序仍然可以运行。抱歉,第一篇文章并不能完全确定问题的原因。我会在以后的帖子中牢记这一点。它应该是
self.pos=vec(self.world.nest.pos)
来实际创建一个新的
Vector2
。谢谢。可能代码过于复杂,但我想这样做,这样我就会遇到类似的事情,知道发生了什么,以及如何修复它们。它应该是
self.pos=vec(self.world.nest.pos)
来实际创建一个新的
Vector2
。谢谢。可能会使代码过于复杂,但我想这样做,这样我会遇到类似的情况,知道发生了什么,以及如何修复它们。