草庐IT

swift - Sprite Kit - 有时球会从屏幕上消失?

coder 2023-09-05 原文

我是 sprite 套件的新手。我试过与 2 名玩家一起玩简单的球弹跳游戏,另一名玩家正在缓慢地跟踪球。但是我发现了一个问题。当我将线移动到球(带边缘)时,球从屏幕上消失了。另一次没问题,球弹跳。有什么问题?

我有一个 GameScene、sks 和 ViewController。我的 Sprite 节点来自 sks。如果有人解释这种情况。会更好。我在下面附上了我所做的。

我的游戏场景:

class GameScene: SKScene {

var ball = SKSpriteNode()
var enemy = SKSpriteNode()
var main = SKSpriteNode()

override func didMove(to view: SKView) {

    ball = self.childNode(withName: "ball") as! SKSpriteNode
    enemy = self.childNode(withName: "enemy") as! SKSpriteNode
    main = self.childNode(withName: "main") as! SKSpriteNode

    ball.physicsBody?.applyImpulse(CGVector(dx: -20, dy: -20))
    ball.physicsBody?.linearDamping = 0
    ball.physicsBody?.angularDamping = 0

    let border = SKPhysicsBody(edgeLoopFrom: self.frame)
    border.friction = 0
    border.restitution = 1

    self.physicsBody = border

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    for touch in touches {

        let location = touch.location(in: self)
        main.run(SKAction.moveTo(x: location.x, duration: 0.2))
    }
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    for touch in touches {

        let location = touch.location(in: self)
        main.run(SKAction.moveTo(x: location.x, duration: 0.2))
    }

}

override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered

    enemy.run(SKAction.moveTo(x: ball.position.x, duration: 0.5))
}

View Controller :

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    if let view = self.view as! SKView? {
        // Load the SKScene from 'GameScene.sks'
        if let scene = SKScene(fileNamed: "GameScene") {
            // Set the scale mode to scale to fit the window
            scene.scaleMode = .aspectFill

            // Present the scene
            view.presentScene(scene)
        }

        view.ignoresSiblingOrder = true


    }
}

override var prefersStatusBarHidden: Bool {
    return true
}

打击垫设置:

球设置:

Some updates

我在更新功能中尝试了一些消息,然后遇到了同样的情况,球从设备左侧(使用 iPhone 6S)跑到外面

2016-12-08 14:27:54.436485 Pong[14261:3102941] fatal error: ball out of left bounds: file

最佳答案

您正在与敌人一起将球捏在墙上。这意味着力最终足以产生足够的球运动速度/力来克服物理系统,因此它会穿过墙壁。如果您在敌人将球夹在墙上之前让敌人停下来,您应该没问题。

这种“夹紧”是由于这行代码而发生的:

enemy.run(SKAction.moveTo(x: ball.position.x, duration: 0.5))

这是让敌人追球,这对于球类游戏来说是个好主意,但它的移动方式是错误的。使用一个 Action 意味着敌人被施加了无限的力量,并且瞄准了球的中间。

因此,当球到达墙壁时,它靠着一个具有无限静态力的物理对象停止,然后这个敌人出现并从另一侧施加无限力......并且球在敌人的范围内弹开,或越过墙的另一边,因为它被无穷大的力量压碎了。

所以你要么需要非常注意如何通过 Action 控制敌人,要么使用力量来控制敌人,因为这些不会是无限的,物理系统将能够反击敌人.

关于swift - Sprite Kit - 有时球会从屏幕上消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41035346/

有关swift - Sprite Kit - 有时球会从屏幕上消失?的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. ruby-on-rails - environment.rb 中设置的常量在开发模式中消失 - 2

    了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl

  3. ruby-on-rails - 我日志中的 [1m[35m] 是什么,我该如何让它消失? - 2

    如果这个问题已经得到回答,我提前道歉。我一直在尝试在Google和StackOverflow上搜索此内容,但由于我的搜索查询中包含标点符号,因此搜索引擎往往会对其进行修改并给出无意义的结果。在我的rails应用程序(rails3.2.11,ruby1.9.3)中,我的日志经常是这样的:StartedGET"/apply/contact"for127.0.0.1at2013-01-2917:35:21-0600ProcessingbyJobApplicationsController#showasHTMLParameters:{"id"=>"contact"}[1m[36mJobAppl

  4. ruby-on-rails - 在服务器端检测屏幕尺寸和像素密度? - 2

    我一直在做一些研究,我想我已经知道答案了,但我想知道是否有任何方法可以在不使用javascript或依赖CSS3媒体的情况下获得设备的屏幕尺寸和像素密度查询。本质上,我正在研究如何获取屏幕分辨率和像素密度,以便服务器可以决定在URI请求中为服务器提供哪个图像。到目前为止,我还没有发现任何证据表明这是可能的,但我想嘿,为什么不问问呢? 最佳答案 我不完全同意上面的正确答案。实际上,这个答案在很多情况下都是正确的……但理论上并非如此。通常向Web服务器发出的请求包含一个User-Agent字段,从理论上讲,该字段可用于识别有关设备屏幕分

  5. ruby - 以编程方式在 Ruby 中获取桌面的屏幕截图? - 2

    我问了这个关于takingapictureofawebpageprogrammatically的问题,我已经下载并获得了webkit2png工作(为博客等HTML页面拍照)。太酷了,谢谢你给我看!现在我想开始做更多的事情,比如能够在加载Flash网站和我的桌面后拍照。是否可以使用webkit2png为Flash网站拍照(考虑到您可能需要等待几秒钟才能加载)?但主要问题是,如何以编程方式为桌面拍照?这将使我能够更好地控制正在发生的事情。 最佳答案 您可以使用xwd(1)获取根窗口的屏幕截图:xwd-display:0-root|xwd

  6. ruby - (Watir webdriver) 在 OSX 10.9 中使用多显示器时如何将浏览器移动到另一个屏幕 - 2

    我知道有一个名为browser.window.move_to(0,0)的函数可以将浏览器移动到不同的位置,但OSX10.9对它来说是全新的。有什么方法可以将浏览器移动到另一个桌面吗?例如。在“桌面2”中触发命令的控制台,但我希望浏览器出现在“桌面1”中。非常感谢! 最佳答案 哈,在我尝试这个之前我正要说这可能是不可能的:browser.window.move_to(-1200,0)我的第二台显示器位于主屏幕的左侧。有效。好问题。您需要花点时间才能正确使用它,但watir似乎能够使用整个显示器Canvas。例如,如果您的显示器位于主屏

  7. ruby - 为什么 open ("url") 有时会返回 File 有时会返回 StringIO? - 2

    我有两个CSV文件存储在S3上。当我打开其中之一时,返回一个文件。当我打开另一个时,返回一个StringIO。fn1#=>"http://SOMEWHERE.s3.amazonaws.com/setup_data/d1/file1.csv"open(fn1)#=>#fn2#=>"http://SOMEWHERE.s3.amazonaws.com/setup_data/d2/d3/file2.csv"open(fn2)#=>#为什么?有没有办法用一致的数据类型打开它们?我需要将相同的数据类型String传递到CSV.read(open(file_url))中,如果有时它得到一个则它不起作

  8. ruby - 如何使用 ruby​​ 和 unix 服务器截取网页的屏幕截图? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我正在尝试以编程方式创建大量网页的缩略图,这些网页托管在我自己的基于ruby​​/rails的网站上。我希望能够编写一个独立的ruby​​代码,看起来像这样:require'awesome-screenshot-maker'items.eachdo|id|url="http://foo.com/bar/#{id}"shooter=AwesomeScreenshotMa

  9. ruby-on-rails - 在 rake 任务中打印到屏幕 - 2

    我有一个长时间运行的rake任务。我时不时地在屏幕上打印更新,让我知道任务已经完成了多长时间。puts"Almostthere..."我的问题是所有puts语句似乎都缓冲在某处,直到任务完成后才会打印到屏幕上。届时,它们将被一次性全部打印出来。有什么方法可以强制他们在任务运行时打印吗? 最佳答案 STDOUT.sync=true 关于ruby-on-rails-在rake任务中打印到屏幕,我们在StackOverflow上找到一个类似的问题: https://

  10. ruby-on-rails - 在 ruby​​/rails 中,如何对日期有时可能为空的日期值进行排序? - 2

    我想按游戏日期对我的游戏进行排序,但有时游戏日期可能为空,我会得到一个异常:undefinedmethod`to_datetime'fornil:NilClass@games=@teams.reduce([]){|memo,team|memo+team.games}.sort_by(&:game_date)有什么好的方法吗? 最佳答案 如果您只想删除没有日期的条目,最简单的解决方案-ar.select(&:date).sort_by(&:date)在末尾添加nils可以用ar.select(&:date).sort_by(&:dat

随机推荐