如何实现此运动样式的边界或碰撞?

2024-06-16 12:27:50 发布

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

我试着做一个简单的游戏,效果很好。这个动作就像俄罗斯方块的动作(瞬间,就像心灵传送),这就是我想要的。我不想要流畅的动作,我想要这种动作风格。你知道吗

但有个问题。。。当我尝试为我的角色和rect添加边界或冲突时,它不起作用,但是如果我编写这个代码,它只起作用一次,然后左箭头键和右箭头键都不起作用了。我怎样才能解决这个问题?你知道吗

import pygame
pygame.init()

ekranx = 160
ekrany = 310
window = pygame.display.set_mode((ekranx, ekrany))
white = (255,255,255)
black = (0,0,0)
blue = (0,0,200)
pygame.display.set_caption("TOP")
clock = pygame.time.Clock()
ball = pygame.image.load("top.png")


def top(x,y):
    window.blit(ball,(x,y))
top_x = (55)
top_y = (250)
cikis = False
while not cikis:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            cikis = True
        if event.type == pygame.KEYDOWN:
                #--SOL
                if event.key == pygame.K_LEFT:
                    top_x += -50


                #--SAĞ
                if event.key == pygame.K_RIGHT:
                    top_x += 50


    #print(event)
    window.fill(white)
    top(top_x,top_y)
    pygame.draw.rect(window,blue,(5,5,150,300),5)
    if top_x < 6:
        pygame.K_LEFT = False
    if top_x > 104:
        pygame.K_RIGHT = False
    pygame.display.update()
    clock.tick(60)
pygame.quit()
quit()

Tags: recteventfalseiftopdisplaywindowpygame
1条回答
网友
1楼 · 发布于 2024-06-16 12:27:50

pygame.K_LEFT = False<;不要那样做。您正在重写pygame.K_LEFT常量(实际上是一个整数276),这意味着您无法在程序中再使用它(pygame将不再识别这些事件)。你知道吗

如果球向左或向右移动太远,只需将top_x设置为最小值或最大值:

if top_x < 6:
    top_x = 6
if top_x > 104:
    top_x = 104

相关问题 更多 >