Python Pygame-如何阻止精灵离开窗口边缘?
我的窗口弹出,我可以用我的箭头键在屏幕上移动我的精灵。我知道sprite上有一个碰撞功能,但我似乎不知道如何阻止它们移动到可见区域之外。有什么想法吗 我的移动功能:Python Pygame-如何阻止精灵离开窗口边缘?,python,pygame,Python,Pygame,我的窗口弹出,我可以用我的箭头键在屏幕上移动我的精灵。我知道sprite上有一个碰撞功能,但我似乎不知道如何阻止它们移动到可见区域之外。有什么想法吗 我的移动功能: def moveme(self,coords) #coords=(x,y) self.rect.move_ip(coords) 对于事件处理程序,我使用的是 keys = pygame.key.get_pressed() if keys[pygame.K_UP]: character.moveme((0,
def moveme(self,coords)
#coords=(x,y)
self.rect.move_ip(coords)
对于事件处理程序,我使用的是
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
character.moveme((0, -4))
任何帮助都将不胜感激 在查找rect属性后,我自己找到了答案。。这是密码
def moveme(self,x,y):
if self.rect.left + x < 0:
self.rect.left = 0
elif self.rect.right + x > 700:
self.rect.right = 700
elif self.rect.top + y < 0:
self.rect.top = 0
elif self.rect.bottom + y > 400:
self.rect.bottom = 400
else:
self.rect.move_ip((x,y))
def moveme(self,x,y):
如果self.rect.left+x<0:
self.rect.left=0
如果self.rect.right+x>700:
self.rect.right=700
elif self.rect.top+y<0:
self.rect.top=0
如果self.rect.bottom+y>400:
self.rect.bottom=400
其他:
自校正移动(x,y))
其中400是窗户的高度,700是宽度,移动后使用夹钳怎么样
Rect.clamp_ip(Rect): return None
它采用一个矩形,在您的例子中,它是窗口元组
因此,您的代码如下所示:
screen_rect = pygame.Rect((0, 0), (700, 400))
def moveme(self,x,y):
self.rect.move_ip((x,y))
self.rect.clamp_ip(screen_rect)
我想我在这里找到了:
import pygame
running = True
GREEN = (0, 255, 0)
BLACK = (0, 0, 0)
FPS = 30
pygame.init()
all_sprites = pygame.sprite.Group() #groupes all sprites
all_sprites.update()
tab.fill(BLACK) #any color
all_sprites.draw(tab)
clock = pygame.time.Clock()
WIDTH = 500 #YOUR WIDTH
HEIGHT = 500 #YOUR HEIGHT
tab = pygame.display.set_mode((WIDTH, HEIGHT)) #window width and height
class Player(pygame.sprite.Sprite):
#your Character
def __init__():
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("Ship.png") #your image or shape/sprites look
self.rect = self.image.get_rect()
self.rect.center = (WIDTH / 2, (HEIGHT / 2)) #sprites Position
def update(self):
key = pygame.key.get_pressed();
#stop at edge commands (might need to ajust)
if(self.rect.x >= (WIDTH-200)):
self.rect.x -= 10;
elif(self.rect.x <= 0):
self.rect.x += 10;
elif(self.rect.y <= 0):
self.rect.y += 10;
elif(self.rect.y >= (HEIGHT-200)):
self.rect.y -= 10
else:
#sprites move commands
if key[pygame.K_RIGHT]:self.rect.x += 10;
if key[pygame.K_LEFT]:self.rect.x -= 10;
if key[pygame.K_UP]:self.rect.y -= 10;
if key[pygame.K_DOWN]:self.rect.y += 10;
player = Player() #makes the sprite that the player controlles
all_sprites.add(player)
while (running):
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
all_sprites.update() #updates screen
tab.fill(BLACK)
all_sprites.draw(tab) #adds all sprites to the screen
pygame.display.flip()
导入pygame
运行=真
绿色=(0,255,0)
黑色=(0,0,0)
FPS=30
pygame.init()
所有精灵=pygame.sprite.Group()#对所有精灵进行分组
所有精灵更新()
制表符填充(黑色)#任何颜色
所有精灵。绘制(选项卡)
clock=pygame.time.clock()
宽度=500#你的宽度
身高=500#你的身高
tab=pygame.display.set_模式((宽度、高度))#窗口宽度和高度
职业玩家(pygame.sprite.sprite):
#你的性格
def u u init__;()
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“Ship.png”)#您的图像或形状/精灵外观
self.rect=self.image.get_rect()
self.rect.center=(宽度/2,(高度/2))#精灵位置
def更新(自我):
key=pygame.key.get_pressed();
#在边缘停止命令(可能需要调整)
如果(自校正x>=(宽度-200)):
自校正x-=10;
elif(self.rect.x我还没有代表投票,但这很好。我不知道clamp_ip。我已经用pygame.display.get_surface()定义了self.area。get_rect()。谢谢!