首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的代码只会偶尔注意到冲突?

为什么我的代码只会偶尔注意到冲突?
EN

Stack Overflow用户
提问于 2021-03-14 09:13:11
回答 1查看 56关注 0票数 1

这个游戏是一个太空射击游戏,我有一个奇怪的问题,我的激光有时只击中敌人,而其他时候正好通过。

代码语言:javascript
复制
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

我有激光和入侵者的类,amtLasers是一个列表,它存储屏幕上的激光,直到它们被删除。我没有设置为在接触时摧毁敌人,所以我能够注意到,如果我继续向敌人射击,同样的敌人有时会被击中,而其他时候不会被击中。为什么会发生这种情况?我如何修复它?

这里有一个编辑:激光只击中最近产生的敌人,我想我知道为什么

代码语言:javascript
复制
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)

当一个新的敌人产生时,invaders.x和invaders.y跟踪这个特定的敌人,而不跟踪其他敌人,因为这个类同时在屏幕上有多个敌人。我如何分别追踪每个敌人?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-14 15:52:39

您将需要测试,看看是否有任何激光击中任何敌人。使用2个嵌套循环来迭代敌人和激光:

代码语言:javascript
复制
for lasers in amtLasers[:]:
    for invaders in amtInvaders[:]:

        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

请注意,您需要迭代列表的浅层副本。参见How to remove items from a list while iterating?

我建议使用pygame.Rect objects和colliderect进行碰撞测试:

代码语言:javascript
复制
laser_rect = pygame.Rect(laser.x, laser.y, laser_width, laser_height)
invader_rect = pygame.Rect(invaders.x, invaders.y, invaders_width, invaders_height)

if laser_rect .colliderect(invader_rect):
    amtLasers.pop(amtLasers.index(lasers))
    amtInvaders.pop(amtInvaders.index(invaders))
    score += 20

参见How do I detect collision in pygame?How to detect collisions between two rectangular objects or images in pygame

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66620138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档