这个游戏是一个太空射击游戏,我遇到了一个奇怪的问题,我的激光只是偶尔击中敌人,而其他时候正好通过
for lasers in amtLasers:
if lasers.y < invaders.y:
if lasers.x > invaders.x-56 and lasers.x < invaders.x+28:
amtLasers.pop(amtLasers.index(lasers))
amtInvaders.pop(amtInvaders.index(invaders))
score += 20
我有激光和入侵者的课程,AmtLaser是一个列表,存储屏幕上的激光,直到它们被删除。我没有将其设置为在接触时摧毁敌人,因此我能够注意到,如果我继续射击敌人,同一个敌人有时会被击中,而其他时候不会被击中。为什么会发生这种情况?我如何修复它
这里有一个编辑: 激光只击中最近繁殖的敌人,我想我知道为什么
class invader(object):
def __init__(self):
self.x = randint(30, 1020)
self.y = 0
color = randint(1, 3)
if color == 1:
self.col = (225,0,0)
elif color == 2:
self.col = (0,225,0)
elif color == 3:
self.col = (0,115,255)
self.vel = randint(1, 2)
当一个新的敌人诞生时,入侵者.x和入侵者.y会跟踪这个特定的敌人,而不会跟踪其他敌人,因为这个类同时在屏幕上有多个敌人。我如何分别追踪每个敌人
你将需要测试,看看是否有任何激光击中任何敌人。使用2个嵌套循环迭代敌人和激光:
请注意,您需要迭代列表的浅副本。见How to remove items from a list while iterating?
我建议使用^{} 对象和^{} 进行碰撞测试:
见How do I detect collision in pygame?和How to detect collisions between two rectangular objects or images in pygame
相关问题 更多 >
编程相关推荐