Class PYGAME-使一个对象向自动生成的对象旋转

Class PYGAME-使一个对象向自动生成的对象旋转,class,object,pygame,rotation,sprite,Class,Object,Pygame,Rotation,Sprite,我创造了一个连续射击的炮塔。然而,我想让它转向不断繁殖的僵尸。我设法使炮塔对准玩家,因为我已经初始化了它: if tile_object.name == 'player': self.player = Player(self, obj_center.x, obj_center.y) 然后目标是:“self.player”。不过,对于僵尸,我初始化如下: if tile_object.name == 'zombie': Mob(self, obj_center.x, obj_cen

我创造了一个连续射击的炮塔。然而,我想让它转向不断繁殖的僵尸。我设法使炮塔对准玩家,因为我已经初始化了它:

if tile_object.name == 'player':
   self.player = Player(self, obj_center.x, obj_center.y)
然后目标是:“self.player”。不过,对于僵尸,我初始化如下:

if tile_object.name == 'zombie':
    Mob(self, obj_center.x, obj_center.y, 'normal', 420)
在我尝试为它指定game.mobs(而不是game.player)的目标之后,它会提示组mobs不使用“pos”属性,我非常肯定它会这样做

我觉得我完全不明白为什么它不能针对一般的暴徒。我试着阅读关于团体和精灵的文章,但没有让任何事情变得更清楚

这是我的炮塔的代码:

class Turret(pg.sprite.Sprite):
    def __init__(self, game, x, y):
        self.last_shot = 0
        self.maxforce = 0.1
        self.damage = 0
        self.detect_radi = 360
        self._layer = MOB_LAYER
        self.groups = game.all_sprites, game.turrets
        self.image = game.turret_img.copy()
        self.rect = self.image.get_rect()
        self.rect.center = (x, y)
        self.hit_rect = MOB_HIT_RECT.copy()
        self.hit_rect.center = self.rect.center
        self.weapon = 'pistol'

        pg.sprite.Sprite.__init__(self, self.groups)
        self.game = game
        self.rect = self.image.get_rect()
        self.rect.center = (x, y)
        self.pos = vec(x, y)
        self.rect.center = self.pos
        self.rot = 0

############## HERE IS WHERE THE ISSUE IS ##############
        self.target = game.mobs
        
    def update(self):
        
        target_dist = self.target.pos - self.pos
        if target_dist.length_squared() < self.detect_radi**2:

            self.rot = target_dist.angle_to(vec(1, 0))
            self.image = pg.transform.rotate(self.game.turret_img, self.rot)
            self.rect.center = self.pos
            self.acc = vec(1, 0).rotate(-self.rot)
            self.shoot(self.weapon)
class炮塔(pg.sprite.sprite):
定义初始化(self,game,x,y):
self.last_shot=0
self.maxforce=0.1
自损=0
自检测半径=360
self.\u层=移动层
self.groups=游戏。所有精灵,游戏。炮塔
self.image=game.tarta\u img.copy()
self.rect=self.image.get_rect()
self.rect.center=(x,y)
self.hit_rect=MOB_hit_rect.copy()
self.hit_rect.center=self.rect.center
自我武器=‘手枪’
pg.sprite.sprite.\uuuu init\uuuu(self,self.groups)
self.game=游戏
self.rect=self.image.get_rect()
self.rect.center=(x,y)
self.pos=vec(x,y)
self.rect.center=self.pos
self.rot=0
##############这就是问题所在##############
self.target=game.mobs
def更新(自我):
target\u dist=self.target.pos-self.pos
如果目标距离长度平方()
self.rot=目标距离角度(向量(1,0))
self.image=pg.transform.rotate(self.game.tarta\u img,self.rot)
self.rect.center=self.pos
self.acc=vec(1,0)。旋转(-self.rot)
自我射击(自我武器)
非常感谢任何帮助,因为当我试图让炮塔瞄准暴徒时,我感到完全迷失了方向

它会提示群氓不使用“pos”属性,我很肯定它会这样做。”*

我非常确定mob对象具有
pos
属性,但是包含mob的组没有
pos
属性

查找具有最接近diestane的mob对象:

target\u dist=self.target.pos-self.pos

target\u dist=None
对于self.target中的mob:
dist=mob.pos-self.pos
如果target_dist==None或dist.length_squared()

注意:如果
self.target
不包含任何敌人,你需要实施一个额外的案例。

你的代码看起来没有那么糟糕吗?你的
update
方法看起来很有希望。到底是什么问题?谢谢,更准确地说,游戏开始时没有产生“僵尸”,类似于生存游戏中有一波僵尸僵尸来了。但是,我希望炮塔在僵尸来时只是瞄准他们。虽然,当我试图参考炮塔瞄准僵尸/怪物时,它会提示僵尸组没有任何位置-->AttributeError:“group”对象没有属性“pos”。所有的怪物都有“self.pos=vec(x,y)”它会提示群氓不使用“pos”属性,我很肯定它会这样做。“-没有。我非常确定一个
Mob
对象具有属性
pos
,但是包含Mob的组没有属性
pos
好的,在这种情况下,您知道如何更好地制定self.target选择吗?我错了,因为我认为group.mobs基本上是所有mob/zombie实例。它很有效!一如所愿。感谢you@hanmic-谢谢你。不客气。