python - Pygame图像矩形与除了左墙之外的所有东西碰撞
问题描述
试图为我的高中课程制作一个开始屏幕。图像应该在屏幕上移动,与每面墙碰撞并朝下一个方向移动。由于某种原因,图像不会与左墙碰撞,我不知道为什么。
class StartScreen:
def __init__(self):
screen.fill(WHITE)
self.fontTitle = pygame.font.SysFont("arial", 30) #
self.textTitle = self.fontTitle.render("Legend Of Zelda: ", True, WHITE)
self.textRect = self.textTitle.get_rect(center=(displayWidth / 2, 50))
self.moveImage = pygame.image.load("images/link_down1.png")
self.moveImageRect = self.moveImage.get_rect()
self.dx = 3
self.dy = 0
self.moveImageRect.x = 1
self.moveImageRect.y = 11
def update(self):
if self.moveImageRect.right >= displayWidth:
self.dy = 3
self.dx = 0
if self.moveImageRect.left <= 0:
self.dy = -1
self.dx = 0
if self.moveImageRect.top <= 0:
self.dy = 0
self.dx = -3
elif self.moveImageRect.bottom >= displayHeight:
self.dx = -3
self.dy = 0
self.moveImageRect.move_ip(self.dx, self.dy)
def draw(self, surf):
screen.blit(backgroundImage, (backgroundRect))
screen.blit(self.textTitle, self.textRect)
screen.blit(backgroundImage, (backgroundRect))
screen.blit(self.moveImage, self.moveImageRect)
解决方案
if self.moveImageRect.right > 500:
dy = 1
dx = 0
self.moveImageRect.right = 500
elif self.moveImageRect.bottom > 500:
dy = 0
dx = -1
self.moveImageRect.bottom = 500
elif self.moveImageRect.left < 0:
dy = -1
dx = 0
self.moveImageRect.left = 0
elif self.moveImageRect.top < 0:
dy = 0
dx = 1
self.moveImageRect.top = 0
这对我有用,仅检查图像是否移出屏幕然后将其移回屏幕上,以确保它不会与墙壁发生碰撞。
推荐阅读
- python - 可以从类或实例调用 Make 方法
- java - 如何显示帐户列表并提示客户选择哪个特定帐户?
- android - 我无法单击菜单项工具栏来删除列表中的所有电影
- c# - 通过装饰来清理属性以避免 XSS 攻击
- python - 为特征工程编写函数时使用 df.copy() 是否多余?
- c# - 我应该在控制器中使用 async/await 吗?
- mysql - 使用选择结果条件更新需要太长时间
- dialogflow-es - 助手以会话 webhook 格式而不是 Dialogflow webbook 格式发送履行请求
- mysql - 如何将组合框的 ID 插入 Mysql 表
- android - 是否可以根据条件 android 呈现不同的布局?