Python 播放器';s Rect未与玩家/角色对齐

Python 播放器';s Rect未与玩家/角色对齐,python,python-3.x,pygame,Python,Python 3.x,Pygame,我有子弹要射,但是玩家的矩形与玩家本身没有对齐,所以子弹不是来自玩家,而是来自偏移的矩形 三大类: (子弹、照相机和播放器) 如果你运行程序本身,你可以看到代表玩家矩形的红色矩形(最后第四行)并不在角色应该出现的地方 我怎样才能使玩家的rect处于角色的位置?这样子弹就会从玩家身上射出来 谢谢:) 完整代码如下: 您的代码的问题是,您的红色矩形和项目符号都没有被绘制到与相机相关的屏幕上 Bullet类也应该是Sprite的子类,因此您可以将它们添加到all\u Sprite-组中,就像您处理障碍

我有子弹要射,但是玩家的矩形与玩家本身没有对齐,所以子弹不是来自玩家,而是来自偏移的矩形

三大类:

(子弹、照相机和播放器)

如果你运行程序本身,你可以看到代表玩家矩形的红色矩形(最后第四行)并不在角色应该出现的地方

我怎样才能使玩家的rect处于角色的位置?这样子弹就会从玩家身上射出来

谢谢:)

完整代码如下:

您的代码的问题是,您的红色矩形和项目符号都没有被绘制到与相机相关的屏幕上

Bullet
类也应该是
Sprite
的子类,因此您可以将它们添加到
all\u Sprite
-组中,就像您处理障碍物和玩家一样

然后让
摄影机
-类处理项目符号的绘制

至于红色矩形,我建议删除
RelRect
函数并将其移动到Camera类本身,如下所示:

class Camera(object):
    ...
    def translate(self, rect):
        return Rect(rect.x - self.rect.x, rect.y - self.rect.y, rect.w, rect.h)

    def draw_sprites(self, surface, sprites):
        for sprite in sprites:
            if sprite.rect.colliderect(self.rect):
                surface.blit(sprite.image, self.translate(sprite.rect, self))
draw.rect(screen, (255,0,0), camera.translate(player.rect), 4)
这将允许您像这样绘制矩形:

class Camera(object):
    ...
    def translate(self, rect):
        return Rect(rect.x - self.rect.x, rect.y - self.rect.y, rect.w, rect.h)

    def draw_sprites(self, surface, sprites):
        for sprite in sprites:
            if sprite.rect.colliderect(self.rect):
                surface.blit(sprite.image, self.translate(sprite.rect, self))
draw.rect(screen, (255,0,0), camera.translate(player.rect), 4)

对于堆栈溢出来说,代码太多了。拜托,我把它缩短了一点,去掉了关卡,只显示了三个主要的缠绕类,相机类,播放器类和子弹类。随着运行循环。希望这有帮助!谢谢你,我忘了子弹是相对于相机的哈哈哈。