频道栏目
首页 > 资讯 > 其他 > 正文

SpriteKit:开启物理逐像素(Per-Pixel)碰撞检测后发现的问题及解决(续)

16-11-07        来源:[db:作者]  
收藏   我要投稿

之后还是发现一个小问题,就是虽然player可以正确处理碰撞scoreDetect出发点和其他障碍物,但是由于启用了Per-Pixel,还是会发生多次接触的情况,这时玩家的得分就会被多次累加!

相关代码如下:

if contact.bodyA.categoryBitMask == Mask.scoreDetect || contact.bodyB.categoryBitMask == Mask.scoreDetect{
                if contact.bodyA.node == player{
                    contact.bodyB.node?.removeFromParent()
                }else{
                    contact.bodyA.node?.removeFromParent()
                }

                let sound = SKAction.playSoundFileNamed("coin.wav", waitForCompletion: false)
                run(sound)

                score += 1
                return
        }

注意最外围的if判断在player与触发器多次接触时会多次enter,从而导致score += 1多次被调用,这显然不符合实际!

要解决很简单,将代码改写为如下:

if contact.bodyA.categoryBitMask == Mask.scoreDetect || contact.bodyB.categoryBitMask == Mask.scoreDetect{
            if contact.bodyA.node?.name == rockCollisionName || contact.bodyB.node?.name == rockCollisionName{
                if contact.bodyA.node == player{
                    contact.bodyB.node?.removeFromParent()
                }else{
                    contact.bodyA.node?.removeFromParent()
                }

                let sound = SKAction.playSoundFileNamed("coin.wav", waitForCompletion: false)
                run(sound)

                score += 1
            }
            return
        }

即增加一层判断即可,至于为什么,相信大家可以自行烧脑搞清楚 ;]

相关TAG标签
上一篇:Android 7.1 快捷方式 Shortcuts
下一篇:开发日记:KBEngine+Unity+php做个扑克小游戏-DAY1
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站