如何连接两个SKSpriteNode';s使用SKPhysicsJointPin-swift
我正在尝试使用如何连接两个SKSpriteNode';s使用SKPhysicsJointPin-swift,swift,sprite-kit,xcode6,skspritenode,skphysicsjoint,Swift,Sprite Kit,Xcode6,Skspritenode,Skphysicsjoint,我正在尝试使用SKPhysicsJointPin在主播点连接两个SKSpriteNode,在下面的屏幕截图上标记为绿点。 稍后我想启用physicsBody!。在object2上dynamic=true,以获取object2的“摆动动画” 在创建SKPhysicsJointPin时,我在一开始就遇到了困难,即使我在没有编译的Xcode中没有得到错误 代码如下: import SpriteKit class GameScene: SKScene, SKPhysicsContactDelega
SKPhysicsJointPin
在主播点连接两个SKSpriteNode
,在下面的屏幕截图上标记为绿点。
稍后我想启用physicsBody!。在object2上dynamic=true
,以获取object2的“摆动动画”
在创建SKPhysicsJointPin
时,我在一开始就遇到了困难,即使我在没有编译的Xcode中没有得到错误
代码如下:
import SpriteKit
class GameScene: SKScene, SKPhysicsContactDelegate {
let object1 = SKSpriteNode(imageNamed: "white")
let object2 = SKSpriteNode(imageNamed: "black")
override func didMoveToView(view: SKView) {
// Setup background image
self.backgroundColor = UIColor(hex: 0x60c0f3)
// Setup physics body to the scene (borders)
self.physicsBody = SKPhysicsBody (edgeLoopFromRect: self.frame)
// Change gravity settings of the physics world
self.physicsWorld.gravity = CGVectorMake(0, -9.8)
self.physicsWorld.contactDelegate = self
//===========================================
// White object properties
object1.physicsBody = SKPhysicsBody(rectangleOfSize: object1.frame.size)
object1.physicsBody!.dynamic = false
object1.position = CGPointMake(size.width/2 - object1.size.width/2, size.height/2)
// Black object properties
object2.physicsBody = SKPhysicsBody(rectangleOfSize: object2.frame.size)
object2.physicsBody!.dynamic = true
object1.anchorPoint = CGPointMake(0, 0)
object2.position = CGPointMake(size.width/2 + object2.size.width + 2, size.height/2 + object2.size.height/2)
// Create joint between two objects
var myJoint = SKPhysicsJointPin.jointWithBodyA(object1.physicsBody, bodyB: object2.physicsBody, anchor: CGPoint(x: CGRectGetMaxX(self.object1.frame), y: CGRectGetMaxY(self.object2.frame)))
self.physicsWorld.addJoint(myJoint)
self.addChild(object1)
self.addChild(object2)
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
我得到的Xcode错误是
请告知我的代码中有什么错误。
谢谢。两个问题:1)在使用关节连接包含物理实体的节点之前,需要将其添加到场景中;2)需要以最小Y值而不是最大Y值连接节点(如果希望关节的行为如图所示),因为场景的原点是视图的左下角,正Y向上
// Do this prior to adding the joint to the world
self.addChild(object1)
self.addChild(object2)
// Create joint between two objects. Edit: changed MaxY to MinY to attach bodies
// at bottom of the nodes
var myJoint = SKPhysicsJointPin.jointWithBodyA(object1.physicsBody, bodyB: object2.physicsBody, anchor: CGPoint(x: CGRectGetMaxX(self.object1.frame), y: CGRectGetMinY(self.object2.frame)))
self.physicsWorld.addJoint(myJoint)
在示例代码中更新SpriteKit API调用
铰链的静止位置关闭,有时:
对角线应垂直穿过重心(object2具有质量)
有时块是垂直的(90度)
进口SpriteKit
导入快捷键
class PinScene: SKScene {
static let nodeSize = CGSize(width: 300, height: 50)
let object1 = SKSpriteNode(color: .white, size: nodeSize)
let object2 = SKSpriteNode(color: .red, size: nodeSize)
override func didMove(to view: SKView) {
print("PinScene size = \(size.width) x \(size.height)")
self.anchorPoint = CGPoint(x: 0, y: 0) // BottomLeft
// Create 1 of 2 physics bodies attach to a SKNode objects in the scene.
object1.zPosition = 10
object1.anchorPoint = CGPoint(x: 0, y: 0)
object1.position = CGPoint(
x: size.width/2 - object1.size.width,
y: size.height/2
)
addChild(object1)
object1.physicsBody = SKPhysicsBody(rectangleOf: PinScene.nodeSize)
object1.physicsBody!.isDynamic = false
// Create 2 of 2 physics bodies attach to a SKNode objects in the scene.
object2.anchorPoint = CGPoint(x: 0, y: 0)
object2.position = CGPoint(
x: size.width/2 + 1,
y: size.height/2
)
addChild(object2)
object2.physicsBody = SKPhysicsBody(rectangleOf: PinScene.nodeSize)
object2.physicsBody!.isDynamic = true
// Create joint between two objects. Edit: changed MaxY to MinY to attach bodies
// at bottom of the nodes
let myJoint = SKPhysicsJointPin.joint(
withBodyA: object1.physicsBody!,
bodyB: object2.physicsBody!,
anchor: CGPoint(x: object1.frame.maxX, y: object1.frame.minY)
)
physicsWorld.add(myJoint)
}
override func update(_ currentTime: TimeInterval) {
print("far end of Object2 at \(Int(object2.frame.maxX)), \(Int(object2.frame.minY)) ")
}
}