我搜索了这个,我认为必须有一些参数来解决这个问题,但我还没有找到它.
我在SpriteKit中有一个场景,我希望一些圆/球能够反弹并保持它们无限期的任何速度.它们应该从场景的边缘反弹.
如果它们移动速度足够快,或者以相当尖锐的角度击中,这是有效的,但是如果它们变慢并且接近边缘的平面,它们会继续移动(这很好)但是它们"坚持"到边缘.这种坚持是我不想要的.即使走得很慢,它们也应该反弹.
为了设置边缘,我使用了:
SKPhysicsBody *borderBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.physicsBody = borderBody;
self.physicsBody.friction = 0.0;
self.physicsBody.restitution = 1.0;
self.physicsBody.linerDamping = 0.0;
self.physicsBody.angularDamping = 0.0;
self.physicsBody.affectedByGravity = NO;
Run Code Online (Sandbox Code Playgroud)
在圆形节点上,我有类似的设置,如:
ball.usesPresciseCollisionDetection = YES;
ball.dynamic = YES;
ball.restitution = 1.0;
ball.linearDamping = 0.0;
ball.angularDamping = 0.0;
ball.friction = 0.0;
Run Code Online (Sandbox Code Playgroud)
我的场景中的引力为零.我向节点添加了一个冲动,它们开始弹跳 - 看起来非常接近,因为物体反弹,但是如果有任何缓慢移动并以浅角度进入,它们会"拥抱"边缘.我将尝试在下面插图以帮助可视化.
http://i.imgur.com/Rpr7luY.png
我尝试过使用大量的PhysicsBody设置,但不能让事情停止坚持.
谢谢!
我有一个简单的SpriteKit应用程序,墙壁和球.两者都设置为SKPhysicsBody.
当我向一个方向施加力时,我希望球在碰撞时以相同的角度在墙壁上反射,但方向相反.
但有时我看到角度很奇怪.我玩了很多physicsBody属性,但无法解决它.有时第一次反射看起来很好,但是第三次或第六次反射,有时第一次反射是错误的角度.
我从不同的帖子中读到,人们有点自我计算的"正确方向".但我无法想象SpriteKits物理引擎无法做到这一点.
检查我的附图,了解我的意思.有人可以帮忙吗?我不想开始使用Box2d for Swift,因为看起来我很难融入Swift.
这是physicsWorld我的GameScene.swift文件中的init,其中所有元素都添加到:
self.physicsWorld.gravity = CGVectorMake(0, 0)
Run Code Online (Sandbox Code Playgroud)
添加我的所有代码太多了,所以我添加了重要的部分.希望它足以分析.像皮球所有元素,墙壁是SKSpriteNode的
这是physicsBody球的代码:
self.physicsBody = SKPhysicsBody(circleOfRadius: Constants.Config.playersize+self.node.lineWidth)
self.physicsBody?.restitution = 1
self.physicsBody?.friction = 0
self.physicsBody?.linearDamping = 1
self.physicsBody?.allowsRotation = false
self.physicsBody?.categoryBitMask = Constants.Config.PhysicsCategory.Player
self.physicsBody?.collisionBitMask = Constants.Config.PhysicsCategory.Wall | Constants.Config.PhysicsCategory.Enemy
self.physicsBody?.contactTestBitMask = Constants.Config.PhysicsCategory.Wall | Constants.Config.PhysicsCategory.Enemy
Run Code Online (Sandbox Code Playgroud)
这是墙的物理体:
el = SKSpriteNode(color: UIColor.blueColor(), size: CGSize(width: Constants.Config.wallsize, height: Constants.Config.wallsize))
el.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: Constants.Config.wallsize, height: Constants.Config.wallsize))
el.physicsBody?.dynamic = false
el.physicsBody?.categoryBitMask = Constants.Config.PhysicsCategory.Wall …Run Code Online (Sandbox Code Playgroud) 我想在ios 7上使用新的sprite kit制作一个简单的永远弹跳球.我设置了引力:
scene.physicsWorld.gravity=CGVectorMake(0, -9);
Run Code Online (Sandbox Code Playgroud)
对于我设置的球体:
ball.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:17];
ball.physicsBody.mass=1;
ball.physicsBody.restitution=1;
ball.physicsBody.linearDamping=0;
ball.physicsBody.angularDamping=0;
Run Code Online (Sandbox Code Playgroud)
这里的球只是SKSpriteNode.但我有一个问题:每次它反弹它的位置会变得有点高一点.几分钟后,球几乎位于屏幕的顶部.谁能帮助解决这个问题.我只想让球每次都弹回到相同的位置(例如屏幕中间).谢谢.