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物理会破坏对象动画的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套片段和动画对象

防止 ViewPager 破坏屏幕外视图

将 SKSpriteNode 移动 Y - Swift 2 + SpriteKit

SpriteKit fps 在第一次动画调用时下降

SpriteKit问题与Swift中的SKShader动画

如何在 iOS7 SpriteKit 中为不同大小的图像设置动画?