swift – Sprite Kit physicsBody.resting行为

swift – Sprite Kit physicsBody.resting行为,第1张

概述我正在使用Swift和Sprite Kit在XCode Beta 6上开发游戏. 为了检测所有节点是否正在休眠,我检查他们的physicsBody.resting属性. 在更新方法中,我打印出结果. import SpriteKitclass GameScene: SKScene, SKPhysicsContactDelegate { var hero:SKSpriteNode! 我正在使用Swift和Sprite Kit在XCode Beta 6上开发游戏.
为了检测所有节点是否正在休眠,我检查他们的physicsBody.resting属性.
在更新方法中,我打印出结果.
import SpriteKitclass GameScene: SKScene,SKPhysicsContactDelegate {    var hero:SKSpriteNode!    overrIDe func dIDMovetoVIEw(vIEw: SKVIEw) {        self.physicsWorld.gravity = CGVectorMake(0,0)        self.physicsWorld.contactDelegate = self        self.physicsBody = SKPhysicsBody(edgeLoopFromrect:self.frame)        hero = SKSpriteNode(imagenamed: "Spaceship")        hero.position = CGPoint(x:CGRectGetMIDX(self.frame),y:CGRectGetMIDY(self.frame))        hero.zposition = 10.0        hero.physicsBody = SKPhysicsBody(circleOfRadius: hero.size.wIDth/2)        hero.physicsBody.allowsRotation = false        hero.physicsBody.lineardamPing = 0.5        self.addChild(hero)    }    overrIDe func update(currentTime: CFTimeInterval) {        if hero.physicsBody.resting {            println("resting")        } else {            println("moving")        }    }}

令我惊讶的是,结果如下:

移动
休息
移动
(n次相同)
移动
休息

那么为什么英雄在移动,尽管我什么也没做.节点移动N次并休息(休息),之后继续移动.

谁能解释这种行为?这是一个错误还是我错过了什么?提前致谢.

如果你检查物理体的速度,你会发现它确实在移动,但速度是不可察觉的.这就是为什么没有设置休息属性.检查SKPhysicsBody是否静止的更可靠的方法是测试其线性和角速度是否几乎为零.这是一个如何做到这一点的例子:
func speed(veLocity:CGVector) -> float {    let dx = float(veLocity.dx);    let dy = float(veLocity.dy);    return sqrtf(dx*dx+dy*dy)}func angularspeed(veLocity:CGfloat) -> float {    return abs(float(veLocity))}// This is a more reliable test for a physicsBody at "rest"func nearlyAtRest(node:SKNode) -> Bool {    return (self.speed(node.physicsBody.veLocity)<self.verySmallValue        && self.angularspeed(node.physicsBody.angularVeLocity) < self.verySmallValue)}overrIDe func update(_ currentTime: TimeInterval) {    /* Enumerate over child nodes with names starting with "circle" */    enumerateChildNodesWithname("circle*") {        node,stop in        if (node.physicsBody.resting) {            println("\(node.name) is resting")        }        if (self.nearlyAtRest(node)) {            println("\(node.name) is nearly resting")        }    }}
总结

以上是内存溢出为你收集整理的swift – Sprite Kit physicsBody.resting行为全部内容,希望文章能够帮你解决swift – Sprite Kit physicsBody.resting行为所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1051167.html

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

发表评论

登录后才能评论

评论列表(0条)

保存