是否有等效的碰撞点颜色功能?

时间:2019-07-24 12:06:46

标签: python-3.x pygame

我正在制作2D游戏,以便学习python和pygame。目标是控制红点并摆脱地牢。我正在制作由矩形和矩形组成的地图生成器,其颜色将与表面的颜色相同。

例如,能否使我的红点仅在表面颜色(黑色)上移动? 具有某些碰撞点功能或等效功能吗?

我为示例做了一些代码:


import pygame

pygame.init()

X = 750
Y = 750

BLACK = (0,0,0)
RED = (255,0,0)
WHITE = (255,255,255)

done = False

screen = pygame.display.set_mode((X,Y))

X_circle = 375
Y_circle = 375


def mainloop():
    global BLACK, WHITE, RED, X, Y, done, screen, X_circle, Y_circle, Xmove, Ymove

    pygame.key.set_repeat(1,20)

    while not done:
        for event in pygame.event.get():
            Xmove = 0
            Ymove = 0

            screen.fill(BLACK)
            circle = pygame.draw.circle(screen, RED, (X_circle,Y_circle), 15)
            Rect_WHITE = pygame.draw.rect(screen, WHITE, (300, 200, 44, 46))
            pygame.display.update()


            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_KP4:
                    Xmove = -5
                elif event.key == pygame.K_KP6:
                    Xmove = 5
                elif event.key == pygame.K_KP8:
                    Ymove = -5
                elif event.key == pygame.K_KP5:
                    Ymove = 5

            if (X_circle+Xmove<750 and X_circle+Xmove>0):
                X_circle+=Xmove
            if (Y_circle+Ymove<750 and Y_circle+Ymove>0):
                Y_circle+=Ymove

            pygame.display.update()

            if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
                pygame.quit()
                quit()

mainloop()
pygame.quit()
quit()

1 个答案:

答案 0 :(得分:0)

据我所知,没有等效的collidepoint颜色功能。

pygame.draw函数可用于绘制几何形式,但并不旨在控制游戏元素。 pygame还有其他工具可以做到这一点(例如,检查pygame.sprite模块)。

您应该为自己实现一个函数,以比较颜色是否重叠,但是如果您这样做的话,您很快就会意识到自己正在重新发明轮子。
pygame.Surface视为像素图。表面上的几何形状只是具有与背景颜色不同颜色的像素。
换句话说,每个像素具有一种颜色。更改颜色后(例如,在使用pygame.draw函数绘制新形状之后),先前的颜色就会丢失。

最后,您将需要创建一种方式来记住给定位置上的先前颜色,否则您将无法进行任何比较。好吧,pygame已经可以跟踪位置了,它是pygame.Rect。其中已经有colliderectcollidepoint之类的方法。

简短的故事,使用pygame.Rectpygame.Sprite实例来跟踪您的白色矩形,并检查点与它们之间的碰撞。