swift – 物理检测多次碰撞

swift – 物理检测多次碰撞,第1张

概述当球与杯子碰撞时,得分应该增加1.然而,它目前增加1,3或有时4,这意味着多次检测到碰撞. 我想我必须错误地检查碰撞: let ballCategory : UInt32 = 0x1 << 0 let cupCategory : UInt32 = 0x1 << 1 在我的didMoveToView中: //Set physicsBody of scene to a physics body 当球与杯子碰撞时,得分应该增加1.然而,它目前增加1,3或有时4,这意味着多次检测到碰撞.

我想我必须错误地检查碰撞:

let ballcategory   : UInt32 = 0x1 << 0 let cupcategory : UInt32 = 0x1 << 1

在我的dIDMovetoVIEw中:

//Set physicsBody of scene to a physics body that borders the screenself.physicsBody = SKPhysicsBody(edgeLoopFromrect: self.frame)physicsWorld.contactDelegate = self//BallballSprite.physicsBody = SKPhysicsBody(rectangleOfSize: ballSprite.size)ballSprite.physicsBody!.categoryBitMask = ballcategoryballSprite.physicsBody!.contactTestBitMask = cupcategory//CupcupSprite.physicsBody = SKPhysicsBody(edgeLoopFromrect: cupSprite.size) cupSprite.physicsBody!.categoryBitMask = cupcategorycupSprite.physicsBody!.contactTestBitMask = ballcategory

在我的dIDBeginContact中:

var firstbody: SKPhysicsBodyvar secondBody: SKPhysicsBody//Assign the two physics bodIEs so that the one with the lower category is always stored in firstbodyif contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {    firstbody = contact.bodyA    secondBody = contact.bodyB} else {    firstbody = contact.bodyB    secondBody = contact.bodyA}//contact between ball and cupif firstbody.categoryBitMask == ballcategory && secondBody.categoryBitMask == cupcategory {    score++    println("point scored")    moveBall() //Move ball back to start position}

这是因为它正在检测碰撞,但是它发生了多次,而它应该只发生一次.

您可以设置一个BOol值来检查是否允许联系处理(在开头设置YES).更新得分后,您可以将该变量设置为NO,然后再次运行moveBall()并在moveBall()方法结束时将BOol值设置为YES.我认为这样的事情应该有效.

其他方法是从父节点移除球节点或杯节点并将其设置为nil(然后重新创建它们).另外我不知道SpriteKit有多喜欢这种方式(在物理模拟完成之前删除节点).

第三种方法是让Ball类具有一些BOol属性,指示是否应该将球移动到起始位置.根据该值,您应该更新得分变量/处理联系人和冲突.因此,在更新得分后,将BOol值设置为YES,然后运行moveBall(),然后将BOol值设置为NO等…类似于我描述的第一种方法.

总结

以上是内存溢出为你收集整理的swift – 物理检测多次碰撞全部内容,希望文章能够帮你解决swift – 物理检测多次碰撞所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1037251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存