我正在试着用pygame做一个游戏,但是我不知道如何让我的角色不离开屏幕(设置一个限制)。我有一个由用户输入控制的.png图像,但正常情况下,字符可能会离开可见屏幕区域。我想不出该怎么做。我在窗口周围做了一个矩形(pygame.draw.rect),但是我不能将矩形赋值给一个变量,这样我就可以创建一个碰撞。我还尝试了这个:
if not character.get_rect() in screen.get_rect():
print("error")但是它不起作用,只是向python控制台发送垃圾邮件“错误”消息。
(我用这个问题查看了另一个帖子,但什么都不起作用/没有得到它)
所以我的问题是,我如何防止我的角色离开屏幕,哪种方法是最好的?
~谢谢
编辑:我的游戏没有滚动游戏区/摄像头。(只是整个窗口的固定视图)
发布于 2013-09-11 17:09:32
if not character.get_rect() in screen.get_rect():
print("error")我明白你在尝试什么了。如果要检查一个Rect是否在另一个内部,请使用contains()
包含()
测试一个矩形是否在另一个矩形内
contains(Rect) -> bool
当参数完全位于Rect内时,返回true。
如果您只是想停止屏幕边缘的移动,一个简单的解决方案是使用clamp_ip()
clamp_ip()
将矩形移动到另一个矩形内,就地
clamp_ip(Rect) -> None
与Rect.clamp()相同,它返回一个新的矩形,该矩形被移动到参数Rect的内部。如果矩形太大而无法放入其中,则它会在参数Rect中居中,但其大小不会改变。方法,但在适当的位置操作。
下面是一个不能将黑色矩形移出屏幕的简单示例:
import pygame
pygame.init()
screen=pygame.display.set_mode((400, 400))
screen_rect=screen.get_rect()
player=pygame.Rect(180, 180, 20, 20)
run=True
while run:
for e in pygame.event.get():
if e.type == pygame.QUIT: run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_w]: player.move_ip(0, -1)
if keys[pygame.K_a]: player.move_ip(-1, 0)
if keys[pygame.K_s]: player.move_ip(0, 1)
if keys[pygame.K_d]: player.move_ip(1, 0)
player.clamp_ip(screen_rect) # ensure player is inside screen
screen.fill((255,255,255))
pygame.draw.rect(screen, (0,0,0), player)
pygame.display.flip()发布于 2013-09-11 06:36:46
当您使用pygame.draw.rect时,您实际上并没有创建一个“物理”边界-您只是将屏幕上像素的颜色设置为一个矩形。
如果您知道屏幕的大小,以及屏幕上所有对象的位移(仅当您的游戏有滚动游戏区或摄像头时才适用),则可以执行以下操作:
# In the lines of code where you have the player move around
# I assume you might be doing something like this
if keys[pygame.K_RIGHT]:
player.move(player.getSpeed(),0) # giving the x and y displacements
if keys[pygame.K_LEFT]:
player.move(-player.getSpeed(),0)..。
class Player:
...
def move(self, dx, dy):
newX = self.x + dx
newY = self.y + dy
self.x = max(0, min(newX, SCREEN_WIDTH)) # you handle where to store screen width
self.y = max(0, min(newY, SCREEN_HEIGHT))请注意,获取Pygame窗口大小的一个有用工具是pygame.display.get_surface().get_size(),它将为您提供一个宽度和高度的元组。然而,避免每次你需要知道玩家的边界时都调用它还是更好的。也就是说,您应该存储窗口的宽度和高度,以便以后检索。
发布于 2018-02-13 04:38:41
这是一个简单的控制代码,我在我的游戏中使用,以防止精灵从屏幕上消失:
# Control so Player doesn't go off screen
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
if self.rect.bottom > HEIGHT:
self.rect.bottom = HEIGHT
if self.rect.top < 0:
self.rect.top = 0宽度和高度是用来设置屏幕大小的常量。我希望这能帮到你。
https://stackoverflow.com/questions/18729538
复制相似问题