草庐IT

iphone - 在 iOS 策略游戏中拉取游戏机制更新?

coder 2024-01-27 原文

我正计划为 iOS 平台开发一款多人策略游戏。然而,作为一款包含多个“单位”的策略游戏,游戏玩法中可能存在不平衡,需要通过不断的机制调整(升级/削弱某些单位)来解决。

实现此目的最简单的方法就是更改应用程序本身的机制,并不断向 Apple 提交更新。但是,更新需要时间才能通过 Apple 的审核流程传播(因此更改不会立即生效),我需要检查游戏中的所有玩家是否都运行相同版本的游戏,强制用户更新到最新版本的游戏等

我想做的是类似于游戏 Uniwar 的事情。做。每次启动游戏时,它似乎都会检查是否有任何可用的游戏玩法调整,如果有,它会下载更新(并向用户显示一条更新消息,详细说明发生了什么变化)。

但是,作为一个相对较新的程序员,我真的不知道完成这个任务的最简单方法是什么。我是否可以在线托管一个包含单位统计信息的文本文件,并让游戏检查该文件是否有更改?或者有什么更好、更有效的方法吗?如果我要这样做,我会怎么做?

最佳答案

首先,确保您的规则是某种您可以轻松更改的资源(无论是二进制的还是基于文本的)。更新这些最方便的方法是定期轮询服务器,最方便的是使用 HTTP 协议(protocol),根据需要获取更新。在我看来,有两种方法可以做到这一点。

第一种方法使用 HTTP 协议(protocol)出色的缓存能力,因此需要理解这些的服务器(和客户端库)。基本想法是在服务器上发布最新版本的游戏机制副本(例如,到 http://example.org/mechanics.gz,然后让客户端发布条件 GET 请求,其中 If-modified-since header 设置为执行上次更新检查的时间。HTTP 协议(protocol)将有效地为您完成剩下的工作,发出 304 Not modified如果没有更新,如果有更新则发送新机制。这种方法的缺点是每次更新都必须下载整个机制文件(不能使用 diff),并且旧版本将不可用,但它具有吸引人的简单性。

第二种方法包括更新列表(好吧,它们的 URI、ID 和发布日期),比方说 http://example.org/updates.xml,客户端会拉取这些更新在每次民意调查中。客户端然后检查是否有任何它没有的更新,并按时间顺序下载并应用这些更新。使用此方法,旧更新可用(并将具有永久链接),并且可以使用 diff。如果历史很重要或游戏机制文件很大,这很有用。

关于iphone - 在 iOS 策略游戏中拉取游戏机制更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419080/

有关iphone - 在 iOS 策略游戏中拉取游戏机制更新?的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  4. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  5. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  6. objective-c - 在设置 Cocoa Pods 和安装 Ruby 更新时出错 - 2

    我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U

  7. ruby-on-rails - Rails Associations 的更新方法是什么? - 2

    这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user

  8. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  9. ruby - 我需要从 facebook 游戏中抓取数据——使用 ruby - 2

    修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它​​是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为

  10. ruby-on-rails - OSX Yosemite 更新破坏了 pow.cx - 2

    升级到OSXYosemite后,我现有的pow.cx安装不起作用。升级到最新的pow.cx无效。通过事件监视器重新启动它也没有成功。 最佳答案 卸载(!)并重新安装解决了这个问题。curlget.pow.cx/uninstall.sh|shcurlget.pow.cx|sh 关于ruby-on-rails-OSXYosemite更新破坏了pow.cx,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

随机推荐