如何在Pygame中创建边框

2024-10-02 08:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何在Pygame中创建边界来阻止用户控制的对象退出屏幕。现在,我只有这样,当用户控制的对象靠近四个面之一时,python才会打印一些文本

这是到目前为止我的代码

import pygame
from pygame.locals import *
pygame.init()

#Display Stuff 
screenx = 1000
screeny = 900
screen = pygame.display.set_mode((screenx,screeny))
pygame.display.set_caption('Block Runner')
clock = pygame.time.Clock()
image = pygame.image.load('square.png')




#Color Stuff
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
white = (255,255,255)
black = (0,0,0)


#Variables
x_blocky = 50
y_blocky = 750
blocky_y_move = 0
blocky_x_move = 0



#Animations
def Blocky(x_blocky, y_blocky, image):
screen.blit(image,(x_blocky,y_blocky))

#Game Loop

game_over = False
while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                blocky_y_move = -3
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_UP:
                blocky_y_move = 0

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_DOWN:
                blocky_y_move = 3
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_DOWN:
                blocky_y_move = 0

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                blocky_x_move = 3
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT:
                blocky_x_move = 0

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                blocky_x_move = -3
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                blocky_x_move = 0

        if x_blocky > 870 or x_blocky < 0:
            print(' X Border')


        if y_blocky > 750 or y_blocky < 2:
            print(' Y Border')



    y_blocky += blocky_y_move
    x_blocky += blocky_x_move


    screen.fill(white)
    Blocky(x_blocky, y_blocky, image)
    pygame.display.update()
clock.tick(60)

Tags: 对象key用户imageimporteventmoveif
3条回答

不要使用整数来存储位置。使用^{}

所以不是

x_blocky = 50
y_blocky = 750

使用

blocky_pos = pygame.rect.Rect(50, 750)

现在您可以简单地使用

blocky_pos.move_ip(blocky_x_move, blocky_y_move)

move您的对象

移动后,您只需调用^{}/^{}即可确保blocky_pos{}始终在屏幕内

blocky_pos.clamp_ip(screen.get_rect())

此外,您不需要自己定义基本颜色,您可以简单地使用pygame.color.Color('Red')例如

我还建议您使用pygame.key.get_pressed()获取所有按下的键,以查看如何移动对象,而不是创建1000行事件处理代码

此外,您的键盘移动也有一些冗余代码。而不是写作

if event.type == KEYDOWN:

一次又一次地,将KEYUP if语句和KEYDOWN if语句分组

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_UP:
        blocky_y_move = -3
    elif event.key == pygame.K_DOWN:
        blocky_y_move = +3

等等,以及:

if event.type == pygame.KEYUP:
    if event.key == pygame.K_UP:
        blocky_y_move = 0
    elif event.type == pygame.K_DOWN:
        blocky_y_move = 0

如果检测到用户对象在边界附近或边界处,就不要再增加move变量。或者根据您的总体意图,反转移动方向

    if x_blocky > 870 or x_blocky < 0:
        print(' X Border')
        blocky_x_move = 0


    if y_blocky > 750 or y_blocky < 2:
        print(' Y Border')
        blocky_y_move = 0

相关问题 更多 >

    热门问题