【问题标题】:How can I implement boundaries or collisions for this movement style?如何为这种运动风格实现边界或碰撞?
【发布时间】:2018-01-27 21:48:30
【问题描述】:

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

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

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()

【问题讨论】:

    标签: python pygame game-physics collision


    【解决方案1】:

    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
    

    【讨论】:

    • 非常感谢,skrx。你修好了!!!我很感激。非常感谢!!
    • 如果您需要碰撞检测,我还建议您查看pygame.Rects 的工作原理。
    • 感谢您的帮助。顺便说一句,我想创建一个开始菜单(代码相同),但我做不到。我尝试了很多方法,但我做不到。我怎样才能制作开始菜单。这将是一个全白屏和开始或退出按钮?
    • 这确实属于一个新问题,不在 cmets 中,正确解释也有点费力,但作为一个快速而肮脏的解决方案,您可以使用另一个带有自己的事件循环的 while 循环,然后 blit按钮。当用户单击“开始”时,您会跳出循环,主游戏循环将开始。对于按钮,您可以使用pygame.Rects 并使用它们的collidepoint 方法查看鼠标位置是否与它们发生冲突。
    • 更简洁的解决方案是使用finite state machine like this,但您必须了解类和面向对象编程的工作原理。这是一个很好的教程:Program Arcade Games。第 13 章是关于 pygame sprites 和 sprite groups,有助于了解更多关于类的知识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2013-02-18
    相关资源
    最近更新 更多