Pygame - 如何阻止精灵离开窗口边缘?

时间:2013-01-17 20:31:06

标签: python pygame

我的窗口弹出,我可以用箭头键在屏幕上移动我的精灵。我知道在sprite碰撞中有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, -4))

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:5)

移动后使用clamp_ip怎么样?

Rect.clamp_ip(Rect): return None

它需要一个Rectangle,在你的情况下是你的窗口元组。

所以你的代码看起来像这样:

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)

答案 1 :(得分:1)

查找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))

其中400是窗口的高度,700是宽度

答案 2 :(得分:0)

我想我在这里得到了

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()

我从别人那里得到了一些东西,但是我不记得了,但是我认为这会有所帮助--------------------------- -------------------------------------------------- ---------                  注意:您可能需要调整一些变量和空格以及更多。 (注:我不擅长语法)也很抱歉,长期以来,我认为没有所有这些东西都不会奏效。