• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 尝试在循环中一次移动一个 SKShapeNodes

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:56:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想将节点从屏幕外位置移动,并将它们沿 X 轴间隔排列。节点已创建并存储在数组中。我有以下代码可以做到这一点。但是,所有节点同时移动。我希望它们在前一个节点处于新位置时连续移动。我已尝试更改等待操作的持续时间,但它不起作用。

谢谢

    var shapeNodes: [SKShapeNode] = [SKShapeNode]()
    let w = (size.width + size.height) * 0.05

    for _ in 1...5 {
        let s = SKShapeNode(rectOf: CGSize(width: w, height: w), cornerRadius: w * 0.3)
        s.position = CGPoint(x: frame.midX, y: frame.maxY + 75)
        s.zPosition = 3
        s.fillColor = UIColor.cyan
        shapeNodes.append(s)
        addChild(s)
    }

    var posX: CGFloat = 0.0
    for n in shapeNodes {
        let m = SKAction.moveBy(x: posX, y: -300, duration: 2.0)
        m.timingMode = .easeIn
        let w = SKAction.wait(forDuration: 2.0)
        let seq = SKAction.sequence([ m, w ])
        n.run(seq)
        posX += 125
    }



Best Answer-推荐答案


给每个节点一个等待 Action ,其持续时间等于所有先前节点的动画时间。该逻辑与您使用 posX 变量的逻辑非常相似。

var posX: CGFloat = 0.0
var waitDuration: CGFloat = 0
for n in shapeNodes {
    let duration = 2
    let m = SKAction.moveBy(x: posX, y: -300, duration: duration)
    m.timingMode = .easeIn
    let w = SKAction.wait(forDuration: waitDuration)
    let seq = SKAction.sequence([w, m])
    n.run(seq)
    posX += 125
    waitDuration += duration
}

在上面的示例中,我创建了另一个名为 waitDuration 的变量,它跟踪节点在制作动画之前应等待的总时间。

等待 Action 的持续时间设置为 waitDuration,在循环结束时,我将 waitDuration 增加移动 Action 的持续时间。

关于ios - 尝试在循环中一次移动一个 SKShapeNodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46737583/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap