我正在pygame上做一个小的测试游戏,你需要在不接触窗口边界的情况下驾驶飞机绕着屏幕飞行,否则游戏将关闭。在我添加边界代码之前,我能够使飞机的精灵在向左或向右飞行时发生变化,在各自的方向上倾斜。现在,虽然“碰撞边界”代码与精灵代码无关,但平面只保留在它的一个初始精灵中,不会改变(它仍然移动,边界代码工作正常,但精灵本身不会改变)。
这是我的代码:
def game_loop():
x = display_width * 0.45
y = display_height * 0.8
x_change = 0
accel_x = 0
y_change = 0
accel_y = 0
max_speed_x = 2.5
max_speed_y = 2.5
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
elif event.type == pygame.KEYDOWN:
if event.key in (pygame.K_LEFT, pygame.K_a):
accel_x = -.2
img = pygame.image.load('PocketFlyer3.png')
img = pygame.transform.scale(img, (32, 32))
elif event.key in (pygame.K_RIGHT, pygame.K_d):
accel_x = .2
img = pygame.image.load('PocketFlyer2.png')
img = pygame.transform.scale(img, (32, 32))
if event.key in (pygame.K_UP, pygame.K_w):
accel_y = -.2
elif event.key in (pygame.K_DOWN, pygame.K_s):
accel_y = .2
elif event.type == pygame.KEYUP:
if event.key in (pygame.K_LEFT, pygame.K_RIGHT, pygame.K_a, pygame.K_d):
accel_x = 0
img = pygame.image.load('PocketFlyer1.png')
img = pygame.transform.scale(img, (32, 32))
if event.key in (pygame.K_UP, pygame.K_DOWN, pygame.K_w, pygame.K_s):
accel_y = 0
#accel script for X
x_change += accel_x
if abs(x_change) >= max_speed_x:
x_change = x_change/abs(x_change) * max_speed_x
if accel_x == 0:
x_change *= 0.92
x += x_change
#accel script for Y
y_change += accel_y
if abs(y_change) >= max_speed_y:
y_change = y_change/abs(y_change) * max_speed_y
if accel_y == 0:
y_change *= 0.92
y += y_change
display.fill(skyblue)
plane(x,y)
if x > display_width - plane_width or x < 0 or y > display_width - plane_width or y < 0:
gameExit = True
pygame.display.update()
clock.tick(60)
平面和游戏窗口的宽度在此提取之前定义;这个小摘录也没有遗漏什么太重要的东西。(代码缩进的细微差别不是问题所在,只是在发布此问题时发生的事情)
您的边界测试错误(根据width
检查x
和y
,忽略height
),应为:
if (x > display_width - plane_width) \
or (x < 0) \
or (y > display_height - plane_height) \
or (y < 0):
我在PyGame中创建了两个简单的精灵,其中一个是雨伞,另一个是雨滴。雨滴被添加到一个名为< code>all_sprites的sprite组中。伞精灵有自己的组,名为< code>Umbrella_sprite 雨滴从屏幕顶部“落下”,如果其中一个碰到雨伞/与雨伞碰撞..雨滴应该被删除了。但是除了特定雨滴之外,所有其他雨滴都受此影响。
我有一个长方形的小组,里面有一群精灵。精灵在移动(说向上)。当它们到达顶部时,会与边界发生碰撞。我已经建立了一套逻辑,在精灵离开团队时杀死他们。然而,现在的样子,我可以看到精灵离开了团队。我想让它在精灵穿越边界时逐渐消失,直到它消失(并死亡)。 这是一个我想要实现的粗略模型。 我在玩相机,以为我必须修改视口,但它不起作用。达到这种效果的正确方法是什么? 谢谢 编辑:我的相机是这样设置的: 现在它是
我正在与Pygame一起练习,试图学习类,对象等的一些基本用法。 现在,在http://programarcadegames.com/的帮助下,我正在制作一个基本的平台 我有一个精灵播放器和精灵平台。这些平台也可以是移动平台,它应该在碰撞时移动玩家,但是当玩家移动到其他平台时,会发生一些奇怪的传送,我现在没有看到问题。 基本上,当被推时,玩家在逻辑上没有被移动(至少对我来说是这样)。 非常感谢任何
问题内容: 在pygame中,有没有一种方法来寻找某一方之间的碰撞 一个精灵和另一个精灵的特殊一面?例如,如果 精灵A的顶部与精灵B的底部碰撞,返回True。 我肯定有办法做到这一点,但我找不到任何特别的方法 在文档中。 谢谢! 问题答案: 在PyGame中没有函数来获取侧面碰撞。 但你可以试着用 pygame.Rect.CollipePoint公司 测试是否,,, ,,,, 在里面 (pygam
我一直在学习一些pygame教程,并且基于这些教程开发了自己的代码。具体如下: 所以我想出了如何让我的家伙跳跃,但是我已经在天空中放置了一个块并试图这样做: 试图让角色停止跳跃。有没有一个内置的函数来测试这一点,或者有没有一个适合我的方法。顺便说一下,这是行不通的,我似乎也不知道该怎么做。非常感谢任何帮助:)
在开始学习相关知识点之前,我们有必要先学习精灵和碰撞检测的含义。 精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具、人物、场景装饰等,它们都可以看做成一张张小的“精灵”图。除此之外,人物的移动也可以看做是一系列小精灵图构成的序列(按帧组成的序列),如下图所示: 图1:动作逐帧分解图 如果将逐帧分解后的动作,按照一定的频率播放,那么就形成了