python - 如何实现这种运动风格的边界或碰撞?

标签 python pygame game-physics collision

我正在尝试制作一个简单的游戏,并且运行良好。运动就像俄罗斯方 block 的运动(即时,就像传送),这就是我想要的。我不想要流畅的 Action ,我想要这样的 Action 风格。

但是有一个问题...当我尝试为我的角色和矩形添加边界或碰撞时,它不起作用,但如果我编写此代码,它只能工作一次,然后左右箭头键都可以工作不再工作了。我该如何解决这个问题?

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.K_LEFT = False <-- 不要这样做。您在这里重写了 pygame.K_LEFT 常量(实际上是一个整数 276),这意味着您不能再在程序中使用它(pygame 不会不再认识这些事件)。

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

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

关于python - 如何实现这种运动风格的边界或碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45769667/

相关文章:

c++ - Bullet Physics 最简单的碰撞示例

python - 与 asyncio 一起运行阻塞和解除阻塞任务

python - 让 Beaker 与 GAE 一起工作

ios - 如何最好地赋予落球真实世界的重力

python - Py2app:不允许操作

python - 带有brew的OS X上的virtualenv中的PyGame?

simulation - 就尺寸和质量而言,是否可以进行逼真的n体太阳系仿真?

Python Pandas 在单个单元格中进行计算

python - 循环遍历列并调整值 pandas

python - 如何将球反射到 Racket 上