在屏幕上夹紧精灵

时间:2014-06-22 18:39:16

标签: python pygame

我想要阻止我的精灵从屏幕上消失,但我有点困惑。我想我没有正确理解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()

1 个答案:

答案 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_xplayer_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)