Tag: skphysicsbody

触摸移动方法中,SKSpriteNode大小改变时,物理主体大小不会改变

我试图创build一个弹簧发射器,当在场景中移动触摸时,弹簧将会像触摸一样向下拖动,然后在触摸结束方法上popup弹簧上方的项目。 为此,我改变了触摸移动方法SKSpriteNode的大小和位置 – launcher.position = CGPointMake(frame.size.width*0.97, launcher.position.y-1) launcher.size = CGSizeMake(frame.size.width*0.05, launcher.frame.size.height-2) 但SKSpriteNode的物理体没有改变它是这样的 – 请帮助..如果一个SKSpriteNode的变化物理体比它滞后太多.. let springTexture = SKTexture(imageNamed: "spring-wire") launcher.physicsBody = SKPhysicsBody(texture: springTexture, size: launcher.size) launcher.physicsBody?.dynamic = false 创build一次后,有没有办法改变物理体的大小?

bodyWithEdgeLoopF​​romRect不能在横向工作

我只是试图在景观中设置一个基本场景,引力,并在一个边缘循环的场景。 我设置了场景的物理体和mainCharacter精灵物理体,这里是我的代码: -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { self.backgroundColor = [SKColor redColor]; [self setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromRect:[self frame]]]; } return self; } -(void)setupMain { if (!self.mainCharacter) { self.mainCharacter = [[SKSpriteNode alloc] initWithImageNamed:@"spriteDefault"]; [self.mainCharacter setPosition:CGPointMake(CGRectGetMidX([self frame]), CGRectGetMidY([self frame]))]; [self addChild:self.mainCharacter]; self.mainCharacter.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.mainCharacter.frame.size]; self.mainCharacter.physicsBody.dynamic = YES; self.mainCharacter.physicsBody.affectedByGravity = YES; self.mainCharacter.physicsBody.mass = 0.02; } } 所以,在肖像模式下,一切都很完美,但是在风景中,事情变得非常棘手。 […]

SpriteKit联合:跟随身体

我被要求简化这个问题,所以这就是我正在做的事情。 我在SpriteKit的物理关节中挣扎(可能还有物理属性)。 我试过每一个子类和许多configuration,但接缝没有任何作品,或者我做错了什么。 我正在开发蛇游戏。 用户可以控制蛇头以恒定的速度向前移动,用户可以顺时针或逆时针旋转。 所有剩余的蛇的碎片应该跟着头 – 他们应该旅行完全相同的path,头一段时间前。 我认为对于这个游戏来说,拼接点应该是答案,哪个锚点恰好在元素之间的中心。 不幸的是结果并不完美。 结构应该是完美的圆形,但不是。 我附上代码,显示当前效果的gif。 有没有人有足够的经验给我任何build议什么属性的身体和/或关节应该在这里适用于预期的效果? 我的代码: class GameScene: SKScene { private var elements = [SKNode]() override func didMove(to view: SKView) { physicsWorld.gravity = CGVector(dx: 0, dy: 0) let dummyTurnNode = SKNode() dummyTurnNode.position = CGPoint(x: size.width / 2 – 50, y: size.height / 2) let dummyTurnBody = SKPhysicsBody(circleOfRadius: […]

Swift SpriteKit edgeLoopF​​romRect问题

以下代码可以识别场景的底部和顶部边缘 ,并按预期方式弹起球。 但是,场景的左右边缘始终被破坏。 球离开屏幕,然后如果施加足够的力量,最终返回。 就好像场景的边缘超出了iphone模拟器窗口的边缘。 import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView){ self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) backgroundColor = UIColor.cyanColor() var ball = SKSpriteNode(imageNamed: "ball") ball.position = CGPoint(x: self.size.width/2, y: self.size.height/2) self.addChild(ball) ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.frame.size.height/2) let push = CGVectorMake(10, 10) ball.physicsBody.applyImpulse(push) } } 我认为这与.sks文件有关,因为尺寸是在那里设置的,如果我改变它反映在游戏上的尺寸。 任何人都知道如何使这行代码优先于.sks文件的维度? 这样它将是dynamic的,可以在不同的设备上工作。 self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) 我在这里发现了同样的问题,但从来没有回答过: Swift物理边缘识别问题 […]

如何基于平移手势速度将angular度冲击应用于Sprite Kit节点

我在这里要做的是旋转一个SKSpriteNode围绕其锚点,并使其速度和方向与平移手势匹配。 所以如果我的平移手势是围绕精灵的顺时针方向,那么精灵顺时针旋转。 我用我的代码的问题是,它适用于精灵之下从左到右/从右到左的平底锅,但是当我尝试和垂直平移,并且它使得精灵旋转错误的方式,如果我泛精灵。 这是我到目前为止 – let windmill = SKSpriteNode(imageNamed: "Windmill") override func didMoveToView(view: SKView) { /* Setup gesture recognizers */ let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePanGesture:") self.view?.addGestureRecognizer(panGestureRecognizer) windmill.physicsBody = SKPhysicsBody(circleOfRadius: windmill.size.width) windmill.physicsBody?.affectedByGravity = false windmill.name = "Windmill" windmill.position = CGPoint(x: self.frame.size.width / 2, y: self.frame.size.height / 2) self.addChild(windmill) } func handlePanGesture(recognizer: UIPanGestureRecognizer) { if […]

Sprite Kit bodyAtPoint和bodyInRect返回不正确的值?

我创build了一个非常简单的示例代码,只是一个场景,一个精灵节点20x20px,在屏幕上的0.0点。 当我打电话给scene.physicsWorld bodyAtPoint它返回我这个节点,即使在点,例如:34×34。 但是在35×35点它返回null 。 所以基本上所有从0px到34px的点都返回这个节点,从35px开始,它不再返回。 任何想法可能是什么原因,如果精灵明显地结束在20px 20px? 在bodyInRect可以看到相同的行为。 这里是示例代码: -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { /* Setup your scene here */ self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; self.physicsWorld.gravity = CGVectorMake(0, 0); SKSpriteNode *node = [[SKSpriteNode alloc] initWithColor:[UIColor whiteColor] size:CGSizeMake(20, 20)]; node.position = CGPointMake(10, 10); node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(20, 20)]; [self addChild:node]; […]

Sprite Kit – 确定轻扫手势的向量来轻弹Sprite

我有一个游戏,从屏幕底部的圆形物体射击,我想能够刷他们轻扫我的方向滑动。 我的问题是,我不知道如何计算滑动的向量/方向,以便让圆形对象以适当的速度在适当的方向上弹起。 我使用的静态向量“(5,5)”需要通过滑动的滑动速度和方向来计算。 另外,我需要确保一旦我与对象第一次接触,就不会再发生,从而避免双击对象。 以下是我目前正在做的事情: -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) { CGPoint location = [touch locationInNode:self]; SKNode* node = [self nodeAtPoint:location]; [node.physicsBody applyImpulse:CGVectorMake(5, 5) atPoint:location]; } }

SpriteKit通过applyImpulse移动旋转physicsBody

我想用applyImpulse方法在基于physicsBody旋转的方向上移动一个physicsBody。 例如,physicalBody是一个正方形的形状,我称之为“移动”,它会施加一个冲动,使它垂直向上移动。 然后我调用一个方法将物理旋转45度的权利。 如果我再次调用“移动”方法,physicalBody将向右和向上对angular移动。 任何人都可以帮忙吗?

SpriteKit iPhone / iPad不同的分辨率,需要相同的物理

当我移植一个使用SpriteKit到iPad的iPhone应用程序时,我可以使用iPhone 5到iPad屏幕的高度比例缩放所有屏幕元素和字体大小。 一切看上去都是成比例的,除了物理因为有更多的面积。 所以问题是,如何使用该高度比例来与物体一起缩放物理? 也许改变所有节点的密度或质量? 我该怎么做,math上使用的比例,以便它是完美的?

SpriteKit:检测完整的节点重叠

我有两个SKShapeNodes – 一个是基于边缘的SKPhysicsBody,一个是基于音量的 – 我想在没有碰撞的情况下检测它们的交集。 我已经得到了这个工作正常,SKPhysicsContactDelegate联系方法被调用时,通过另一个传递,但我的问题是,当边不再相交,即使当一个主体完全被包含在另一个时,被调用。 确定真正的接触或重叠的最佳方式是什么,而不仅仅是边缘相交? 我试过用usesPreciseCollisionDetection ,无济于事。