2

我的窗口弹出,我可以用箭头键在屏幕上移动我的精灵。我知道精灵碰撞时精灵有碰撞功能,但我似乎无法弄清楚如何阻止它们移动到可见区域之外。有什么想法吗?

我的移动功能:

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

任何帮助将不胜感激!

4

3 回答 3

6

移动后使用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)
于 2013-01-17T22:37:53.067 回答
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 是宽度

于 2013-01-17T20:46:06.887 回答
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()

我从别人那里得到了一些,但我不记得了,但我认为这会有所帮助 ------------------------------ -------------------------------------------------- ------ 注意:您可能需要调整一些变量和空格等等。(ps:我不擅长语法)也很抱歉,它很长,我认为没有这些东西就行不通。

于 2019-09-06T01:38:35.183 回答