微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果它们碰撞,如何删除数组中的两个游戏对象?

如何解决如果它们碰撞,如何删除数组中的两个游戏对象?

我正在创建一个随机产生流星的游戏,我想摧毁相互碰撞的流星。我将流星放在一个数组中,当我想生成一个流星时,我将 Meteor 类推送到该数组。我有我的 2D 碰撞算法,但我无法弄清楚如何选择要摧毁的流星的逻辑。这是我的流星类相关代码。谢谢。

b'5\xcd\xd1\x0e\x82 \x18\x05\xe0w\xf9\xaf\x1d\x01\x82\xbfzY\xbdAv\xd5\x1aCc\xe9\xc2pB\xb5\xe6|\xf7`\xcb\xdb\xef\x9c\x9d\xb3\xc0M\x07\r\xf5e\x81V{\xa3\xde\xce\xbeF\xa3\xb8\xe8\xa1\x06N\xab\x1c\x11+\x82\x122\xe8\x87{\xff\x0fdI)%\x94F\xb5\xda\x075\xcdCg\x92#2I\x10\x93\xbb\xcfV\x96L\xe4\xa4,"\xba\xc9<7\xc5\x9cK\xc2\xd2\x84W\x01jVP*\xa8(\xa5\x8c\xf0\x1d[gci\xdf\x1c\xd4\xf9tl`\xbdf\x10tk\xd3\x89\x9f\\\xd8\x85\xa1{\x98\x19\xd6\x1f'
const meteorCollision = (a,aIndex,b,bIndex) => {
    if (a !== undefined && b !== undefined) {
        if (a.x < b.x + 50 &&
            a.x + 50 > b.x &&
            a.y < b.y + 50 &&
            a.y + 50 > b.y) {
            meteors.splice(aIndex,1);
            meteors.splice(bIndex,1);
        }
    }

}
meteorCollision(meteor,meteorIndex,meteors[meteorIndex + 1],meteorIndex + 1);

解决方法

我通过添加另一个 forEach 来映射数组中的所有项目。不确定这是否是最有效的解决方案,但这就是我想出的。

const meteorCollision = (a,aIndex,) => {
    meteors.forEach((b,bIndex) => {
        if (a !== undefined && b !== undefined && a !== b) {
            if (a.x < b.x + 50 &&
                a.x + 50 > b.x &&
                a.y < b.y + 50 &&
                a.y + 50 > b.y) {
                meteors.splice(aIndex,1);
                meteors.splice(bIndex,1);
                meteorexp.play();
            }
        }
    })


}
meteorCollision(meteor,meteorIndex);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。