使用 SpriteKit 的球滚动和转动效果

Posted

技术标签:

【中文标题】使用 SpriteKit 的球滚动和转动效果【英文标题】:Ball rolling and turning effect with SpriteKit 【发布时间】:2018-07-14 15:20:57 【问题描述】:

我创建了一个球节点,并应用了我的 3D 模型中的纹理图像。我总共捕获了 6 张图像,3 张图像(具有 120 度)用于围绕 x 轴滚动,另外 3 张图像用于围绕 y 轴滚动。我希望精灵套件用下面的代码来模拟它。当我施加脉冲时,它开始滑动而不是滚动,当它碰撞到侧面时,它开始转动但又不滚动。通常,根据球上的冲量,它有时应该一起转动和滚动。对“8球台球游戏”球的影响可以是一个例子,我想得到一个结果。

var ball = SKSpriteNode()
var textureAtlas = SKTextureAtlas()
var textureArray = [SKTexture]()

override func didMove(to view: SKView) 

    textureAtlas = SKTextureAtlas(named: "white")
    for i in 0... textureAtlas.textureNames.count 
        let name = "ball_\(i).png"
        textureArray.append(SKTexture(imageNamed: name))
    

    ball = SKSpriteNode(imageNamed: textureAtlas.textureNames[0])
    ball.size = CGSize(width: ballRadius*2, height: ballRadius*2)
    ball.position = CGPoint(x: -ballRadius/2-20, y: -ballRadius-20)
    ball.zPosition = 0

    ball.physicsBody = SKPhysicsBody(circleOfRadius: ballRadius)
    ball.physicsBody?.isDynamic = true
    ball.physicsBody?.restitution = 0.3
    ball.physicsBody?.linearDamping = 0
    ball.physicsBody?.allowsRotation = true

    addChild(ball)

【问题讨论】:

【参考方案1】:

你需要施加角脉冲来让它旋转

node.physicsBody!.applyAngularImpulse(1.0)

【讨论】:

亲爱的 Knight0fDragon,感谢您的回复,我已经使用以下代码给出了与“applyAngularImpulse(1.0)”中相同的冲动; ball.physicsBody?.applyImpulse(vector, at: CGPoint(x:12, y: 0) ) . 当我们考虑球节点中心的 x,y,z 轴时,使用 angularImpulse,将它向右和向左转动没问题,但我想给他一个冲动,让他滚动(推或对球产生反向效果),我该如何应用它?取决于它,它应该被视为滚动(围绕 y 或 x 轴)而不是向右或向左(围绕 z 轴) 是否可以在 Spritekit 场景中使用 3d 节点并在 z 轴上施加力,让球滚动或反转?

以上是关于使用 SpriteKit 的球滚动和转动效果的主要内容,如果未能解决你的问题,请参考以下文章

jQuery写出可调控自定义的平滑滚动效果(锚点跳转动画)

覆盖 SpriteKit 中的碰撞

SpriteKit - 如何使用“挡板”使奖品轮减速?

设置我的球的位置

SpriteKit 和可滚动列表

SpriteKit 多向滚动