暂停 GKAgent 的最佳方法是什么?
我的游戏在某些级别使用了一些代理,我需要在我的游戏暂停/gameOver 时暂停它们。
我不会在我的游戏中暂停整个 SKScene,而是暂停一个 worldNode,因为即使在游戏暂停时,它也能让我更灵活地显示 spriteKit 内容。
我正在使用
updateWithDeltaTime...
更新代理行为并相应移动它们的方法。
我考虑过停止更新方法,但代理仍会移动到他们最后已知的 GKGoal。
目前我找到的最佳解决方案是在我的游戏暂停时将代理速度/最大速度设置为 0。我在这里遇到的问题是,恢复后将速度重置为代理以前的速度有点痛苦,尤其是在使用多个具有自己行为的代理时。它们似乎也消失了,而不是在恢复时重新出现。
据我所知,没有 agent.paused 方法或类似的方法。
在不暂停 SKScene 本身的情况下暂停代理的好方法是什么?
感谢您的帮助和建议。
最佳答案
我想我现在找到了一个似乎可行的解决方案。
首先,我会在游戏暂停时停止 udapteDeltaMethods。
我查看所有实体并将代理委托(delegate)设置为 nil
for entity in baseScene.entityManager.entities {
if let soldier = entity as? BossWorld3Soldiers {
soldier.agentComponent.delegate = nil
}
}
当我重新开始游戏时,我称之为
for entity in baseScene.entityManager.entities {
if let soldier = entity as? BossWorld3Soldiers {
let action1 = SKAction.waitForDuration(0.5)
let action2 = SKAction.runBlock({ soldier.resetAgentDelegate() })
baseScene.runAction(SKAction.sequence([action1, action2]))
}
}
resetAgentDelegate() 方法只是我的实体类中用于重置代理委托(delegate)的便捷方法
func resetAgentDelegate() {
self.agentComponent.delegate = self
}
在重置代理委托(delegate)之前,我在恢复时使用了轻微的延迟,因为如果没有延迟,实体/代理似乎会在恢复其 GKGoals 之前进行大量跳跃/消失几秒钟。
关于Swift GameplayKit 在不暂停场景的情况下暂停 GKAgent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580132/
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
我正在学习Rails,对Sinatra和Merb知之甚少。我想知道您会在哪些情况下使用Merb/Sinatra。感谢您的反馈! 最佳答案 Sinatra是一个比Rails更小、更轻的框架。如果你想让一些东西快速运行,只需发送几个URL并返回一些简单的内容,就可以使用它。看看Sinatrahomepage;这就是启动和运行“Hello,World”所需的全部内容,而在Rails中,您需要生成整个项目结构、设置Controller和View、设置路由等等(我还没有有一段时间写了一个Rails应用程序,所以我不知道“Hello,World
s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成
假设我在Store的模型中有这个非常简单的方法:defgeocode_addressloc=Store.geocode(address)self.lat=loc.latself.lng=loc.lngend如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。谢谢!特里斯坦 最佳答案 使用内置模拟和stub的rspecs,你可以做这样的事情:setupdo@subject=MyCl
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
我仍然收到标题中的“错误”消息,但不知道如何解决。在ApplicationController中,classApplicationController在routes.rb#match'set_activity_account/:id/:value'=>'users#account_activity',:as=>:set_activity_account--thisdoesn'tworkaswell..resources:usersdomemberdoget:action_a,:action_bendcollectiondoget'account_activity'endend和User
是否可以让这段代码更紧凑?我在这里错过了什么吗?ifvaluemax_ratemax_rateelsevalueend 最佳答案 这里有一些完全不同的东西:[min_rate,value,max_rate].sort[1] 关于ruby-如何更优雅地记下这三种情况?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/13309740/