随机生成 Spritekit 节点

2023-12-14

我正在制作一个游戏,其中有一个节点正在生成并从屏幕顶部掉落。但是我想让节点以 3 秒之间的随机时间间隔生成。因此,1 秒内生成一个,2.4 秒内生成下一个,1.7 秒内生成下一个,依此类推。我正在努力解决这个问题的代码应该是什么。

我目前用于生成节点的代码:

    let wait = SKAction.waitForDuration(3, withRange: 2)
    let spawn = SKAction.runBlock { addTears()
    }

    let sequence = SKAction.sequence([wait, spawn])
    self.runAction(SKAction.repeatActionForever(spawn))

我的 addTears() 函数的代码是:

func addTears() {
        let Tears = SKSpriteNode (imageNamed: "Tear")
        Tears.position = CGPointMake(Drake1.position.x, Drake1.position.y - 2)
        Tears.zPosition = 3
        addChild(Tears)

    //gravity
    Tears.physicsBody = SKPhysicsBody (circleOfRadius: 150)
    Tears.physicsBody?.affectedByGravity = true

    //contact
    Tears.physicsBody = SKPhysicsBody (circleOfRadius: Tears.size.width/150)
    Tears.physicsBody!.categoryBitMask = contactType.Tear.rawValue
    Tears.physicsBody!.contactTestBitMask = contactType.Bucket.rawValue
    }

不建议您使用NSTimer与 SpriteKit (参见SpriteKit - 创建计时器)。相反,要生成随机时间,您可以使用SKAction.waitForDuration:withRange:

创建一个空闲一段随机时间的操作。

当操作执行时,操作会等待指定的时间 时间,然后结束……

每次执行该操作时,该操作都会计算一个新的随机数 持续时间的值。持续时间可以在任一方向上变化 最多为价值的一半持续时间范围范围...

要随机生成节点,您可以组合waitForDuration:withRange with runBlock:一起在一个SKAction顺序。例如:

// I'll let you adjust the numbers correctly...
let wait = SKAction.wait(forDuration: 3, withRange: 2)
let spawn = SKAction.run {
    // Create a new node and it add to the scene...
}

let sequence = SKAction.sequence([wait, spawn])
self.run(SKAction.repeatForever(sequence))
// self in this case would probably be your SKScene subclass.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机生成 Spritekit 节点 的相关文章

随机推荐

  • 应用程序启动时导航抽屉始终处于膨胀状态

    我正在尝试将导航抽屉添加到我的主要活动中 在 Activity main xml 的设计视图中 它应该作为阴影动画在活动布局的左侧可见 我不知道我应该在这里使用什么术语 向右拖动 滑动时应该可见 但就我而言 它默认覆盖整个活动 并且不显示活
  • 获取 Dynamics 365 的身份验证令牌时出现错误 AADSTS90002

    我在尝试从 Net 客户端使用 Dynamics 365 进行身份验证时遇到以下错误 AADSTS90002 Tenant authorize not found This may happen if there are no active
  • 无法在带有 Xcode 4.3.1 和 IOS 的 iPhone 4.2.1 上运行应用程序

    我希望有人可以提供帮助 这个问题已经困扰我一段时间了 我正在运行 Xcode 4 3 1 和基本 SDK iOS 5 1 iPhone版本是4 2 1 我相信是旧的3S型号 当点击 运行 时 Xcode 编译正常 并表示它正在手机上运行我的
  • 将 unicode 转换为 char

    如何将 Unicode 字符串转换为char or char const in 内河码头 c String text Hello world char txt AnsiString text c str Older text t str i
  • 如何在 C# 中监控剪贴板内容变化? [复制]

    这个问题在这里已经有答案了 I want to have this feature in my C program When the user do Ctrl C or Copy anywhere i e when the clipboar
  • 在matlab中找到峰值

    假设我们确定向量中的峰值如下 我们有长度为 m 的实数值一维向量 或者 x 1 x 2 x 米 如果 x 1 gt x 2 则显然对于第一个点 Peak 1 x 1 否则我们将 x 3 与 x 2 进行比较 如果 x 3 indexes p
  • 如何将工具提示添加到 JavaFX Canvas 的矩形区域

    在我的 JavaFX 应用程序中 我有一个TableView具有多个列 其中一列以图形形式显示数据 为此 我创建了一个CanvasCell创建并管理自己的对象Canvas来处理绘图 绘图部分工作得很好 我现在想把Tooltips范围内的一些
  • 我怎样才能得出这个观点?

    List gt l user我有一个List具有用户引用字段的节点 l user Story gt s user然后我有Story也有用户引用字段的节点 s user 之间没有直接联系List and Story 我想添加一个视图List列
  • GWT 在 CloseHandler 中检测浏览器刷新

    我有一个 GWT 应用程序 我想在用户离开应用程序时运行一些代码以强制注销并删除任何数据等 为此 我使用 CloseHandler 并使用 Window addCloseHandler 注册它 我注意到 当单击刷新按钮时 会运行 onClo
  • dalvikvm:找不到类“android.*”

    在此输入图像描述开发时 应用程序在Android 5 0系统上可以正常使用 但是在5 0以下的系统中会出现应用程序无响应的情况 但不知道是什么原因 错误日志如下 E dalvikvm Could not find class android
  • 如何限制使用 argparse 解析的值(例如,将整数限制为正值)?

    到目前为止我有这个代码 import argparse parser argparse ArgumentParser parser add argument g games type int default 162 help The num
  • 如何在 C# 中重置计时器?

    有三种Timer我所知道的课程 System Threading Timer System Timers Timer and System Windows Forms Timer 但这些都没有 Reset 函数会将当前经过的时间重置为 0
  • C# 将 PDF 文件上传到 Firebase 项目存储?

    你们知道如何将 PDF 文件直接上传到 Firebase 项目存储吗 我在互联网上搜索了很多 但一无所获 有一些 C 的库吗 或者有 C 和 Firebase 的文档吗 请大家帮忙 谢谢 EDIT 好的 我找到了一个库 FirebaseSh
  • 由于异步,在 WebApi 中使用 HttpContext.Current 是危险的

    我的问题与此有点相关 WebApi 相当于具有依赖注入的 HttpContext Items 我们想使用 Ninject 在 WebApi 区域中使用 HttpContext Current 注入一个类 我担心的是 这可能是非常危险 如 W
  • 使用 Path.Combine 时出现路径遍历警告

    我目前正在使用 NewtonJSON 从 JSON 文件加载一些 UI 数据 但是 有一个警告说我有路径遍历 情况如下 有办法消除这个安全漏洞吗 当用户或其他不可信源提供的路径未经检查而与父路径组合时 路径遍历漏洞就可能发生 问题在于路径的
  • 如何以编程方式访问 Maximo 列表 where 子句

    在 Maximo 的 WOTRACK 应用程序中 我需要找到某种方法以编程方式访问当前窗口查询的 where 子句 很明显 它存在于 Maximo 中的某个位置 因为您可以在 UI 中的 高级搜索 gt Where 子句 下访问它 我需要找
  • 如何在HSQLDB和C#.net之间建立连接?

    如何在HSQLDB和C net之间建立连接 我已经看过 SharpHSQL 和 H2Sharp 但无法连接 HSQLDB 尝试这样 确保您已添加 hsqldb dll IKVM OpenJDK Core dll IKVM OpenJDK J
  • 仅使用 C 从 STDIN 读取一行以提取数字标记

    问题陈述 需要处理从 STDIN 接受的输入字符串 并仅查找字符串中存在的所有数字标记 将标记视为由空格分隔的可打印字符序列 在数字标记中 所有字符都是数字 您需要构建一个新字符串 其形式为 numeric token1 numeric t
  • iptables 脚本阻止除所需应用程序之外的所有互联网访问

    CONTEXT 我想要一个 shell 脚本来阻止所有到我的计算机的入站 出站流量 除非我决定要使用浏览器或其他应用程序 在这种情况下 我会调用它并且只有这些应用程序会运行 我研究了以前由聪明人制作的脚本 最后有源链接 并投入时间自己学习使
  • 随机生成 Spritekit 节点

    我正在制作一个游戏 其中有一个节点正在生成并从屏幕顶部掉落 但是我想让节点以 3 秒之间的随机时间间隔生成 因此 1 秒内生成一个 2 4 秒内生成下一个 1 7 秒内生成下一个 依此类推 我正在努力解决这个问题的代码应该是什么 我目前用于