草庐IT

swift - 在 SpriteKit 中环绕 SKFieldNode 有困难

coder 2023-09-17 原文

我正在尝试让一个简单的 SKSpriteNode 在 SKFieldNode.radialGravityField() 进入其定义的 SKRegion 后完美地绕轨道运行。我通过 self.physicsWorld.gravity = CGVectorMake(0.0, 0.0) 将场景的重力设置为零。

我正在尝试模拟真实空间。我听说过使用关节,但感觉不像使用真正的重力计算那么顺畅。这里有什么想法吗?

编辑: 我的代码目前没有按预期工作。它会将一个对象发送到 radialGravityField() 但不会完美地绕轨道运行(甚至接近完美)。它确实在轨道上运行,但在一个狂野的椭圆形中。当我说完美时,我指的是围绕 gravityField 中心的圆圈形状。

补充:我只是在考虑使用 radialGravityField() 的替代方法。也许在 update 方法中只计算飞行物体的位置会更容易。如果它的位置在行星半径内,则使用 SKJoint 并使其绕轨道运行。以前有人这样做过吗?

提前致谢!

到目前为止,这是我的代码...

   import SpriteKit

    class GameScene: SKScene {

    override func didMoveToView(view: SKView) {
        /* Setup your scene here */

        self.physicsWorld.gravity =  CGVectorMake(0.0, 0.0)
        self.view?.backgroundColor = UIColor.darkGrayColor()


        let circle = SKShapeNode(circleOfRadius: 30.0)
        circle.position = CGPoint(x: self.frame.width / 2 + 10, y: self.frame.height / 2)
        circle.fillColor = .whiteColor()
        addChild(circle)


        let gravityField = SKFieldNode.radialGravityField()
        gravityField.position = circle.position
        gravityField.region = SKRegion(radius: 100.0)
        gravityField.strength = 4.0
        gravityField.enabled = true
        addChild(gravityField)


    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
       /* Called when a touch begins */
        let p = SKSpriteNode(color: UIColor.purpleColor(), size: CGSize(width: 20, height: 20))
        p.physicsBody = SKPhysicsBody(rectangleOfSize: p.size)
        p.physicsBody?.dynamic = true
        p.physicsBody?.mass = 0.5
        p.position = touches.first!.locationInNode(self)

        addChild(p)

        p.physicsBody?.applyImpulse(CGVector(dx: 0.0, dy: 300 * p.physicsBody!.mass))

    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
    }

最佳答案

您的物体位于椭圆中,因为它的速度与该距离处的重力不完全匹配。如果它最初从重力场射出,那么它对于圆形轨道来说太快了,尝试降低它的速度。如果它最初落向重力场,那么它就太慢了,因此请尝试提高速度。

或者,您可以调整与场的初始距离或重力场的强度。

应该可以使轨道成为圆形,但这需要大量的摆弄,如果有任何扰动轨道(例如碰撞),它就会再次抛出。

这更多的是关于轨道动力学的物理学而不是编程。重力是否是正确的解决方案取决于您要在最终应用程序中实现的目标。也许this SO question有一些有用的信息。

关于swift - 在 SpriteKit 中环绕 SKFieldNode 有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35387780/

有关swift - 在 SpriteKit 中环绕 SKFieldNode 有困难的更多相关文章

  1. ruby - 在新的 RHEL6 服务器上安装 ruby​​-filemagic gem 有困难 - 2

    它似乎在寻找libmagic.so.1文件。我有那个文件。它位于/usr/lib64。我没有以root用户身份运行此安装。我也在使用rvm和Bundler。这是我的“bundle”命令的结果,当它到达我的Gemfile中的ruby​​-filemagic行时:[server@mineext]$rubyextconf.rb--with-magiclibcheckingformagic_open()in-ltrue...no***ERROR:missingrequiredlibrarytocompilethismodule***extconf.rbfailed***Couldnotcrea

  2. ruby-on-rails - 为什么 ruby​​ 中的内存分析如此困难? - 2

    或者更确切地说,为什么没有更好的工具来分析ruby​​中的内存,特别是Rails应用程序?最近,我们的Rails应用程序(托管在heroku上)开始在workerdynos中发现大量R14错误。这意味着我们的内存不足。将测功机提高到2倍(512mb->1GB)只能暂时缓解问题,让我相信某处存在内存泄漏。自然地,我的下一步是找到一个可以帮助我发现泄漏源的良好分析工具。也许我只是不知道可用的工具,或者我只是不知道如何使用我拥有的工具。我的愿望是我可以安装一个gem,然后运行关于内存使用统计的报告。由于我的内存问题与运行延迟作业的workerdynos隔离,因此点击端点获取报告并不可行。我看

  3. javascript - jQuery 环绕文本 - 2

    我有以下内容hellothistexthasnospan在jQuery中,我如何包装一个div或围绕“此文本没有跨度”文本进行跨度? 最佳答案 对于您当前的示例,这是我的单行解决方案:$("divspan").detach().prependTo($("div").contents().wrap("").end());演示:http://jsfiddle.net/awwTA/ 关于javascript-jQuery环绕文本,我们在StackOverflow上找到一个类似的问题:

  4. javascript - 使 Javascript 代码黑客攻击/注入(inject)/操纵变得困难的方法? - 2

    是否有方法可以防止或使某人难以注入(inject)Javascript并操纵变量或访问函数?我有一个想法是在每次重新加载时随机更改所有var名称,以便每次都需要重写恶意软件脚本?或者还有其他不那么痛苦的方法吗?我知道最终有人会闯入,但我想知道如何使重现操作变得困难,这样人们就不会发布小书签或类似的东西供所有人使用。我不在乎专家是否在代码中找到了他们的方法,但我希望它比javascript:d=0;复杂一点如果您知道如何让破解Javascript变得更加困难,请写下来。 最佳答案 接受您的javascript将被“操纵”并在服务器端进

  5. javascript - 如何制作 TextGeometry 多行?如何将它放在一个正方形内,使其像 html 文本在 div 内一样环绕? - 2

    我正在使用WebGL、three.js和THREE.TextGeometry制作一些3D文本。到目前为止一切正常。我能够创建单行3D文本。现在我想创建多行文本,比如一个短段落。最好,我希望它在到达放置它的框/矩形的边界时自然换行。我想要标准HTML文本在div内部时具有的类似行为,换行当它到达它的父div的边缘时到多行。这是我创建单行的方式:textGeo=newTHREE.TextGeometry('Hellothere.AmIaparagraph?Ihopeso.','size':30'height':2'font':'helvetiker''weight':'normal''st

  6. javascript - 使用 mod 环绕 - 2

    假设数组的长度为1000。我正在尝试创建一种简单的方法来遍历存储在数组中的图像路径而不会越界。当涉及到单击“下一步”按钮以增加数组索引时,下面的方法使用模数很好地处理了环绕,但当我必须减少并从索引中减去一个时(当用户单击上一个按钮时)。基本上我想做的是:998->clicknext->999999->clicknext->00->clickprevious->999我的Javascriptvarindex=0;$('.catalog-img-container').attr("src",javascript_array[index]);$(".next").click(function

  7. javascript - 将任意数量的具有不同宽度的元素对齐到带有环绕的网格 - 2

    编辑我已经接受了下面@user943702给出的答案。我需要稍微修改它以使用我的Vue实现,如下面的代码片段所示。consttheElements=[{name:"ele1",children:[{name:1},{name:2},{name:3},{name:4},{name:5}]},{name:"ele2",children:[{name:1},{name:2},{name:3}]},{name:"ele3",children:[{name:1},{name:2},{name:3}]},{name:"ele4",children:[{name:1},{name:2},{name:

  8. go - 开始时遇到困难。 `package main` 引发运行时错误 - 索引超出范围? - 2

    我是围棋的初学者。而我刚刚安装了gophernotes,打算主要使用JupyterNotebook进行编程。此程序在Jupyter中运行时出现以下错误:Cell1:packagemainOut1:runtimeerror:indexoutofrangeCell2:import"fmt"funcmain(){fmt.Println("helloworld")}main()Out2:helloworld当我在test.go中编写相同的内容并从bash执行时:goruntest.go,我得到以下信息:Deepaks-MacBook-Air:JUPYTERdeepak$goruntest.go

  9. swift - 将 json 编码时间转换为 nsdate - 2

    当我将time.Now()编码到JSON对象时,它给出的结果为"2009-11-10T23:00:00Z"但打印时间。现在给出2009-11-1023:00:00+0000UTC。他们为什么不同。什么是T和Z。另外,如何根据this将其转换为swiftNSDate对象?表? 最佳答案 这些值的含义无关紧要,它们是该格式(ISO8601)的一部分。有几种方法可以解决这个问题。一种是为时间或您的结构定义自定义MarshalJSON()方法并使用它来格式化日期,另一种是首先在您的结构中将其表示为字符串,以便当默认实现执行你得到你正在寻找的

  10. windows - 运行Go文件困难 - 2

    这个问题在这里已经有了答案:StuckonGoogleHomeTutorial(1个回答)关闭5年前。我卡在了这个教程上。每次我导航到我的文件所在的位置并尝试“gorunpopulationapi.go”步骤时,都没有任何反应。我在我的工作区中创建了一个文件populationapi.go,我已经将其设置为GOPATH变量。我有一台Windows电脑。它应该位于三个文件夹中的哪一个(bin、pkg或src)?关于出了什么问题有什么想法吗?https://www.programmableweb.com/news/how-to-get-started-google-actions/how-

随机推荐