精灵物理破坏对象动画



有可能在接触时销毁对象吗?就像不只是用body.removeFromParent((从屏幕上删除它一样,我想要一个动画。

我有一个玩家和墙壁,当玩家有特殊的电源时,我希望它能够在接触时摧毁墙壁。我可以想象,我把墙分成了很多小的物理体,它们像一个锚点一样紧紧地粘在一起,当我的玩家击中它时,它们会从玩家那里得到一种冲动(我想只是把isDynamic设置为true(,然后失去锚点,这样所有的精灵节点都会飞起来,墙就会被摧毁。

你能给我一些帮助/建议吗?

您不需要以任何方式将构成墙的节点连接在一起,只需将它们放在屏幕上即可。如果玩家没有电源,请关闭墙节点实体collisionBitMask中玩家的位,这样墙节点就不会与玩家发生碰撞。然后,当玩家撞到墙时,玩家将受到碰撞的影响(并反弹(,但墙节点将不受影响。

当玩家通电时,使墙节点受到碰撞的影响,并打开玩家和墙之间的接触(只打开玩家的contactTestBitMask中墙类别的位就足够了(。然后,墙节点将受到碰撞的影响(并移动或旋转(,并且将调用didBegin(),您可以在每个墙节点上运行一个动作,该动作包括所需的动画,并以removeFromParent()结束。

碰撞和接触指南测试位掩码:https://stackoverflow.com/a/40596890/1430420

操纵位掩码以转向碰撞&触点时断时续。https://stackoverflow.com/a/46495864/1430420

编辑:SK演示显示一个物体撞击由块组成的墙:

创建一个新的SK项目并将其用作游戏场景,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
}
}
}

最新更新