我的窗口弹出,我可以用箭头键在屏幕上移动我的精灵。我知道在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))
非常感谢任何帮助!
答案 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()
我从别人那里得到了一些东西,但是我不记得了,但是我认为这会有所帮助--------------------------- -------------------------------------------------- --------- 注意:您可能需要调整一些变量和空格以及更多。 (注:我不擅长语法)也很抱歉,长期以来,我认为没有所有这些东西都不会奏效。