Spritekit物理会破坏对象动画
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spritekit物理会破坏对象动画相关的知识,希望对你有一定的参考价值。
是否有可能在接触时破坏物体?不仅仅是通过body.removeFromParent()从屏幕上删除它,我想要一个动画。
我有一个玩家和墙壁,当玩家有一个特殊的通电时,我希望它能够在接触时破坏墙壁。我可以想象,我喜欢墙壁分裂成许多小物理身体,它们像锚点一样握在一起,当我的玩家击中它时,它们会从玩家那里获得冲动(只是设置为动态为真我猜)并且放弃了锚点使所有的精灵节点都会飞行,所以墙就会被摧毁。
你能给我一些帮助/建议这样做的好方法吗?
您无需以任何方式将构成墙的节点组合在一起 - 只需将它们放在屏幕上即可。如果播放器没有上电,请关闭墙上节点的physicsBodies collisionBitMask
中播放器的位,以便墙节点不会与播放器发生冲突。然后当玩家撞到墙壁时,玩家将受到碰撞的影响(并且反弹),但是墙壁节点将不受影响。
当玩家上电时,让墙壁节点受到碰撞的影响,并打开玩家和墙壁之间的接触(这足以打开玩家的contactTestBitMask
中墙壁类别的位)。然后墙壁节点将受到碰撞(并移动或旋转)的影响,您的didBegin()
将被调用,您可以在每个墙节点上运行一个动作,包括您想要的动画并以removeFromParent()
结尾。
碰撞和contactTest位掩码指南: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
}
}
}
以上是关于Spritekit物理会破坏对象动画的主要内容,如果未能解决你的问题,请参考以下文章