官术网_书友最值得收藏!

Physics bodies and gravity

SpriteKit simulates physics with physics bodies. We attach physics bodies to all the nodes that need physics computations. We will set up a quick example before exploring all of the details.

Dropping like flies

Our bees need to be part of the physics simulation, so we will add physics bodies to their nodes. Open your Bee.swift file and locate the init function. Add the following code at the bottom of the function:

// Attach a physics body, shaped like a circle 
// and sized roughly to our bee. 
self.physicsBody = SKPhysicsBody(circleOfRadius: size.width / 2) 

It is that easy to add a node to the physics simulation. Run the project. You will see our two bee instances drop off the screen. They are now subject to gravity, which is on by default.

Solidifying the ground

We want the ground to catch falling game objects. We can give the ground its own physics body so that the physics simulation can stop the bees from falling through it. Open your Ground.swift file, locate the createChildren function, and add this code at the bottom of the function:

// Draw an edge physics body along the top of the ground node. 
// Note: physics body positions are relative to their nodes. 
// The top left of the node is X: 0, Y: 0, given our anchor point. 
// The top right of the node is X: size.width, Y: 0 
let pointTopLeft = CGPoint(x: 0, y: 0) 
let pointTopRight = CGPoint(x: size.width, y: 0) 
self.physicsBody = SKPhysicsBody(edgeFrom: pointTopLeft, 
    to: pointTopRight) 

Run the project. The bees will now quickly drop and then stop once they collide with the ground. After the bees have landed, your simulator will look like the following screenshot:

Solidifying the ground

Note

Checkpoint 3-A

The code up to this point is available in this chapter's code resources.

主站蜘蛛池模板: 马尔康县| 虞城县| 浠水县| 大新县| 兴安盟| 固原市| 桑植县| 桦川县| 苗栗市| 上杭县| 格尔木市| 瑞昌市| 阳江市| 富民县| 法库县| 界首市| 资源县| 裕民县| 无锡市| 金塔县| 万全县| 苏尼特左旗| 曲松县| 游戏| 南皮县| 阿瓦提县| 通道| 沙河市| 张家口市| 辽阳市| 瓦房店市| 迁西县| 磐石市| 张家口市| 土默特右旗| 齐齐哈尔市| 东乌| 长顺县| 肇庆市| 鄂托克旗| 元阳县|