我想要阻止我的精灵从屏幕上消失,但我有点困惑。我想我没有正确理解get_rect方法的概念。在这个阶段,我收到了这个错误:
TypeError:参数必须是rect样式对象
这是我的代码:
import pygame
pygame.init()
finish = False
white = ( 255, 255, 255)
black = (0, 0, 0)
grey = (211, 211, 211)
font = pygame.font.Font("C:/Windows/Fonts/BRITANIC.TTF", 20)
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Game")
line_speed = 2
line_pos_x = 100
line_pos_y = 0
end_pos = 170
player_x = 10
player_y = 10
player_move_x = 0
player_move_y = 0
dog_img = pygame.image.load("dog_brown.png")
dog_rect = dog_img.get_rect()
timer = pygame.time.Clock()
while finish == False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
finish = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player_move_x = -5
if event.key == pygame.K_RIGHT:
player_move_x = 5
if event.key == pygame.K_UP:
player_move_y = -5
if event.key == pygame.K_DOWN:
player_move_y = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player_move_x = 0
if event.key == pygame.K_RIGHT:
player_move_x = 0
if event.key == pygame.K_UP:
player_move_y = 0
if event.key == pygame.K_DOWN:
player_move_y = 0
player_x += player_move_x
player_y += player_move_y
screen.fill(white)
screen.blit(dog_img,(player_x, player_y))
dog_rect.clamp_ip(screen)
pygame.draw.line(screen,black,[line_pos_x,line_pos_y + line_speed],[100,end_pos + line_speed],5)
line_speed = line_speed + 2
pygame.display.flip()
timer.tick(25)
pygame.quit()
答案 0 :(得分:1)
clamp_ip
需要另一个Rect
作为参数:
...
screen = pygame.display.set_mode((600, 400))
# create a Rect that represents the screen
screen_r = screen.get_rect()
...
while finish == False:
...
# use it instead of screen
dog_rect.clamp_ip(screen_r)
...
此外,要使其正常工作,您应该删除player_x
和player_y
变量并使用dog_rect
Rect来跟踪播放器的位置。
而不是
player_x += player_move_x
player_y += player_move_y
...
screen.blit(dog_img,(player_x, player_y))
简单地做
dog_rect.move_ip(player_move_x, player_move_y)
...
screen.blit(dog_img, dog_rect)