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

Python 如何实现此运动样式的边界或碰撞?,python,pygame,game-physics,collision,Python,Pygame,Game Physics,Collision,我正在尝试做一个简单的游戏,它运行得很好。这个动作就像俄罗斯方块的动作(瞬间,就像心灵传送),这就是我想要的。我不想要流畅的动作,我想要这种动作风格 但是有一个问题。。。当我尝试为我的角色和rect添加边界或冲突时,它不起作用,但如果我编写此代码,它只起作用一次,然后左箭头键和右箭头键都不再起作用。我怎样才能解决这个问题 import pygame pygame.init() ekranx = 160 ekrany = 310 window = pygame.display.set_mode(

我正在尝试做一个简单的游戏,它运行得很好。这个动作就像俄罗斯方块的动作(瞬间,就像心灵传送),这就是我想要的。我不想要流畅的动作,我想要这种动作风格

但是有一个问题。。。当我尝试为我的角色和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()
导入pygame
pygame.init()
ekranx=160
埃克拉尼=310
window=pygame.display.set_模式((ekranx,ekrany))
白色=(255255)
黑色=(0,0,0)
蓝色=(0,0200)
pygame.display.set_标题(“顶部”)
clock=pygame.time.clock()
ball=pygame.image.load(“top.png”)
def顶部(x,y):
窗板(球,(x,y))
top_x=(55)
top_y=(250)
cikis=假
虽然不是cikis:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
cikis=True
如果event.type==pygame.KEYDOWN:
#--溶胶
如果event.key==pygame.K_左:
顶部x+=-50
#--萨Ğ
如果event.key==pygame.K_RIGHT:
top_x+=50
#打印(事件)
窗口填充(白色)
顶部(顶部x,顶部y)
pygame.draw.rect(窗口,蓝色,(5,5150300),5)
如果top_x<6:
pygame.K_LEFT=False
如果top_x>104:
pygame.K_RIGHT=False
pygame.display.update()
时钟滴答(60)
pygame.quit()
退出

pygame.K_LEFT=False
104: top_x=104
非常感谢您,skrx。你修好了!!!我很感激。非常感谢!!如果您需要碰撞检测,我还建议您查看s的工作原理。谢谢您的帮助。顺便说一下,我想创建一个“开始”菜单(代码相同),但我做不到。我试了很多方法,但都做不到。我如何制作开始菜单。这将是一个全白色屏幕和开始或退出按钮?这真的属于一个新问题,不在评论中,要正确解释也有点费劲,但作为一个快速而肮脏的解决方案,您可以使用另一个while循环和它自己的事件循环,只需轻点按钮。当用户单击“开始”时,您将跳出循环,主游戏循环将开始。对于按钮,您可以使用
pygame.Rects
,并通过使用按钮的
collidepoint
方法查看鼠标位置是否与按钮发生碰撞。更干净的解决方案是使用,但您必须了解类和面向对象编程是如何工作的。这里有一个很好的教程:。第13章是关于pygame精灵和精灵团体的,有助于了解更多关于类的信息。
if top_x < 6:
    top_x = 6
if top_x > 104:
    top_x = 104