是否有可能在接触时破坏物体?就像不只是用 body.removeFromParent() 从屏幕上删除它一样,我想要一个动画。
我有一个玩家和墙壁,当玩家有一个特殊的能量提升时,我希望它能够在接触时摧毁墙壁。我可以想象我像墙一样分裂了许多小的物理体,它们像锚点一样粘在一起,当我的玩家击中它时,他们会从玩家那里得到一个冲动(我猜只是将 isDynamic 设置为 true)然后输了锚点,这样所有的精灵节点都会飞起来,所以墙会被摧毁。
你能给我一些帮助/建议一个好的方法吗?
是否有可能在接触时破坏物体?就像不只是用 body.removeFromParent() 从屏幕上删除它一样,我想要一个动画。
我有一个玩家和墙壁,当玩家有一个特殊的能量提升时,我希望它能够在接触时摧毁墙壁。我可以想象我像墙一样分裂了许多小的物理体,它们像锚点一样粘在一起,当我的玩家击中它时,他们会从玩家那里得到一个冲动(我猜只是将 isDynamic 设置为 true)然后输了锚点,这样所有的精灵节点都会飞起来,所以墙会被摧毁。
你能给我一些帮助/建议一个好的方法吗?
您不需要以任何方式将组成墙的节点连接在一起 - 只需将它们放在屏幕上即可。如果玩家没有上电,请关闭墙节点的physicsBodies中的玩家位,collisionBitMask
以免墙节点与玩家发生碰撞。然后当玩家撞到墙壁时,玩家会受到碰撞的影响(并反弹),但墙壁节点不会受到影响。
当玩家上电时,使墙节点受到碰撞影响,同时打开玩家与墙的接触(只需打开玩家的墙类别的位就足够了contactTestBitMask
)。然后墙节点将受到碰撞的影响(并移动或旋转),您didBegin()
将被调用,您可以在每个墙节点上运行一个动作,包括您想要的动画并以removeFromParent()
.
碰撞和接触测试位掩码指南: https ://stackoverflow.com/a/40596890/1430420
操作位掩码以关闭和打开碰撞和接触。 https://stackoverflow.com/a/46495864/1430420
编辑:SK演示显示一个物体撞到由块组成的墙壁:
创建一个新的 SK 项目并将其用作 GameScene,swift:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
physicsWorld.gravity = CGVector(dx:0, dy:0)
let ball = SKSpriteNode.init(color: .red, size: CGSize(width: 50, height: 50))
ball.physicsBody = SKPhysicsBody.init(circleOfRadius: ball.size.width/2)
ball.position = CGPoint(x: 0, y: 0)
buildWall()
addChild(ball)
ball.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 50))
}
func buildWall() {
let xStart : CGFloat = ((scene?.size.width)!/2) * -0.9
var brickPosition = CGPoint(x: xStart, y: 500)
let brickSize = CGSize(width: 20, height:20)
for wallRow in 1...10 {
for wallColumn in 1...30 {
let brick = SKSpriteNode(color: .yellow, size: brickSize)
brick.physicsBody = SKPhysicsBody.init(rectangleOf: brick.size)
brick.position = brickPosition
addChild(brick)
brickPosition.x += brickSize.width + 1
}
brickPosition.x = xStart
brickPosition.y -= 11
}
}
}