Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame-如何阻止精灵离开窗口边缘?_Python_Pygame - Fatal编程技术网

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

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,

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

任何帮助都将不胜感激

在查找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()。谢谢!