我正在制作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()
答案 0 :(得分:0)
据我所知,没有等效的collidepoint
颜色功能。
pygame.draw
函数可用于绘制几何形式,但并不旨在控制游戏元素。 pygame
还有其他工具可以做到这一点(例如,检查pygame.sprite模块)。
您应该为自己实现一个函数,以比较颜色是否重叠,但是如果您这样做的话,您很快就会意识到自己正在重新发明轮子。
将pygame.Surface
视为像素图。表面上的几何形状只是具有与背景颜色不同颜色的像素。
换句话说,每个像素具有一种颜色。更改颜色后(例如,在使用pygame.draw
函数绘制新形状之后),先前的颜色就会丢失。
最后,您将需要创建一种方式来记住给定位置上的先前颜色,否则您将无法进行任何比较。好吧,pygame
已经可以跟踪位置了,它是pygame.Rect。其中已经有colliderect
和collidepoint
之类的方法。
简短的故事,使用pygame.Rect
或pygame.Sprite
实例来跟踪您的白色矩形,并检查点与它们之间的碰撞。