我正在尝试在 iOS 5 中制作一款突破性风格的游戏,并且有几个关于设计的问题。 (这只是一个学习练习)
我计划有 2 个主 Controller :
用户界面 View
模型
我的问题是...
编辑:现在我已经回答了一般性问题,我该如何将其应用于“Ball”对象。
现在我有一个实现 drawRect 的 BallView。我想创建一个 Ball 模型。我需要 Ball 模型、BallView 和 BallViewController 吗?这似乎有点矫枉过正。 GameViewController 应该与 BallViewController 对话吗?
最佳答案
这些是我根据我喜欢以模型- View - Controller 风格构建游戏的方式对您的问题的回答:
(1) 是的,我建议您以非常面向对象的方式构建模型,因为这是游戏中最具逻辑性的部分,也是游戏的核心。它是最容易构造的部分,同时它的结构对构建游戏的过程有很大影响。在构建模型时思考它应该包括哪些部分的一个好方法是这样思考:
“如果我要在两个完全不同的平台上制作同一款游戏,比方说 iPhone 和 Xbox,它们应该能够互相对战——这两款游戏的共同代码是什么?”
代码中完全相同的部分是模型。
在这种情况下,我会这样说:GameBoard(或其他适合球弹跳区域的名称)、Paddle、Ball、Block 等。还有 Level、ScoreKeeper、GameHandler(保留的主类)跟踪游戏规则),玩家(代表物理玩家的类)等可能是合适的类。
该模型会跟踪与游戏规则有关的一切,例如球和桨在游戏场上的位置、速度等。
(2) 您的 UI 类还有另一项任务 - 将您的游戏对象传输到 iPhone,以便用户可以看到、移动和听到它们。
有很多方法可以构建它。通常,您不需要为您拥有的每种类型的对象创建一个 UIView 子类或一个 CCSprite (Cocos2D) 子类。毕竟,它们大多只是一件事,一个 Sprite 。然而,必须有逻辑将游戏世界中的对象位置传输到屏幕上的 Sprite 。 (即使这里为了简单起见建议使用 1:1 关系)
例如,每个游戏对象都可以引用一个 sprite,或者你可以有一个 GameScene 类来保存所有的 sprite 等等。我建议尝试将事物拆分成一些结构,比如有一个绘制游戏板的类和游戏对象,另一个用于绘制 HUD,第三个用于绘制带有一些运动的漂亮背景等,但是这需要您具有某种层结构。
最后一件重要的事情是你有一个 Controller ,它有一个由游戏引擎定期运行的更新方法,这个更新方法首先触发模型更新,然后触发 UI 绘制,以及作为用户进行交互。这是将所有内容绑定(bind)在一起的 Controller 。
我建议您也试试 Cocos2d。它可以帮助您掌握游戏编程中的许多概念。您会很快发现 Cocoa Touch 在哪些方面做得更好以及 Cocos2d 在哪些方面做得更好。
关于iOS 5 iPhone 突破风格的应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11215363/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的