Python 播放器';s Rect未与玩家/角色对齐
我有子弹要射,但是玩家的矩形与玩家本身没有对齐,所以子弹不是来自玩家,而是来自偏移的矩形 三大类: (子弹、照相机和播放器) 如果你运行程序本身,你可以看到代表玩家矩形的红色矩形(最后第四行)并不在角色应该出现的地方 我怎样才能使玩家的rect处于角色的位置?这样子弹就会从玩家身上射出来 谢谢:) 完整代码如下:Python 播放器';s Rect未与玩家/角色对齐,python,python-3.x,pygame,Python,Python 3.x,Pygame,我有子弹要射,但是玩家的矩形与玩家本身没有对齐,所以子弹不是来自玩家,而是来自偏移的矩形 三大类: (子弹、照相机和播放器) 如果你运行程序本身,你可以看到代表玩家矩形的红色矩形(最后第四行)并不在角色应该出现的地方 我怎样才能使玩家的rect处于角色的位置?这样子弹就会从玩家身上射出来 谢谢:) 完整代码如下: 您的代码的问题是,您的红色矩形和项目符号都没有被绘制到与相机相关的屏幕上 Bullet类也应该是Sprite的子类,因此您可以将它们添加到all\u Sprite-组中,就像您处理障碍
您的代码的问题是,您的红色矩形和项目符号都没有被绘制到与相机相关的屏幕上
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)
对于堆栈溢出来说,代码太多了。拜托,我把它缩短了一点,去掉了关卡,只显示了三个主要的缠绕类,相机类,播放器类和子弹类。随着运行循环。希望这有帮助!谢谢你,我忘了子弹是相对于相机的哈哈哈。