vr丨如何让不懂游戏编程属于什么专业的人爱上iphone开发

让不懂编程的人爱上iPhone开发(2013春iOS6版)-第8篇
又到了继续学习iPhone开发的时间了。
这一次我们先来点纯理论知识打打基础吧,千万别打瞌睡。
术语党科普:静态/动态类型语言、强/弱类型定义语言、脚本语言/通用语言,解释型语言/编译语言
相信大家经常被这些术语迷惑吧?这里又到了术语党科普的时间了。
这里的语言不是指英语,汉语,法语这种人类沟通语言,而是指计算机编程语言。静态编程语言和动态编程语言主要是针对高级语言来说的。在编程语言的发展史上,经历了直接面向硬件的机器码,以及稍微人性化一点的汇编语言,再到所谓的高级语言(人类可以比较容易看懂的语言)。在高级语言中,则是从最初的静态类型语言发展到今天比较轻量级的动态类型语言。
所谓的静态和动态是针对变量的数据类型而言的。使用静态类型语言编写的代码中,要声明变量的数据类型,而且不同数据类型的变量不允许直接赋值,它的数据类型是编译期间进行检查的。同时,在使用变量之前就需要为它们分配好内存控件。最典型的静态类型语言就是C,C++,C#,Objective-C,Java。这几种语言的共同特点可以说是功能非常强大,从操作系统到一般的应用,从网络通讯到客户端界面,都可以完全搞定。而且静态语言的结构非常规范,方便调试。但世上难有两全事,静态语言功能虽强大,但相对难以学习,而且灵活性也比较差。另外需要写更多的类型相关代码,让程序显得很臃肿。
静态语言的弱点恰恰是动态语言的强项。所谓的动态类型语言是指在程序运行期间才去进行数据类型检查的语言。也就是说,使用动态语言编程时,不需要给变量指定数据类型,它会在你第一次赋值给变量时,在内部记录数据类型。典型的动态类型语言如Python,Ruby,PHP,JavaScript,Erlang等。
不过动态语言虽然快速灵活,但付出的代价却是,在代码运行前很难找到bug。所获得是开发速度的提升,所失去的是程序的健壮性。
再来看看强类型定义语言和弱类型定义语言。
所谓的强类型定义语言是指强制数据类型定义的语言。也就是说,一旦某个变量被指定了某个数据类型,如果不经过强制转换,它就永远是这个数据类型。
弱类型定义语言当然是相对的,也就是说一个变量可以赋予不同数据类型的值。
比如,Python是动态语言,同时是强类型定义语言,Java是静态语言,也是强类型定义语言。Objective-C显然和Java类似。
然后来看什么是脚本语言?
脚本语言(scripting
language)也是编程语言,它是相对通用性语言来定义的。它们在设计之初不是用来开发独立的应用程序,而是作为嵌入式的语言,用于和其它语言编写的程序组件之间建立通信。脚本语言都有相应的脚本引擎,需要解释器才能执行,而不能编译成可执行文件形式的二进制代码。
脚本语言通常语言简单,可以用文本形式保存,不需要编译成目标程序,在调用的时候直接解释。以JavaScript为例,只需要用记事本新建一个html文件,在里面添加相应的脚本就好了。当使用浏览器打开html文件时,会自动调用里面的JS脚本。
如今的很多脚本语言早就超越了初期的功能,成熟到可以编写独立而精巧的程序,但习惯上我们还是称之为基本语言。
常见的脚本语言有Python,vbscript,javascript,actionscript,Lua,Perl,PHP,Ruby等。
最后来看编译型语言和解释型语言的区别:
使用编译型语言写的程序在执行之前需要用编译器编译成二进制码,并生成独立的可执行文件,以后运行的时候不需要重新编译。比如C,C++,Objective-C都是如此。
解释型语言写的程序在运行的时候才翻译,通常需要一个解释器或者虚拟机对执行的语句进行解释。比如basic,Java等。不过Java语言有点特殊,是编译成字节码,然后用虚拟机来解释执行。
静态/动态,强类型/弱类型,脚本语言/通用语言,解释型/编译型语言都是独立的概念,彼此存在交集,而不是完全相同的概念。
科普结束,相信作为非程序猿的你对上面的术语已经多少有点糊涂了。不过没关系,只要头脑中有个基本的概念就好。随着你编程经验的不断增长,以后就会逐渐明白的。为了安慰下你受到惊吓的心,还是先来点福利吧。
如果你是mm,或许对下面的福利感兴趣:
好了,现在你应该已经从术语的噩梦中脱身了,接着让我们继续前进。
在之前的学习里面,我们已经用随机数来设置了目标数值,同时也知道如何来读取滑动条结点对应的数值,现在就可以来计算玩家的得分了。滑动条上结点对应的数值和目标数值越接近,玩家的得分就越高。
为了计算当前回合的玩家得分,我们需要比较滑动条的数值和目标数值之间的差距:
最简单的方法当然就是直接用currentValue(滑动条的当前数值)减去targetValue(目标数值)。不过,
当滑动条的结点位置的数值小于目标数值时,得到的差值就是负数。
这个时候我们就得把负数转换成整数。那么如果用targetValue减去currentValue可以吗?一样的,如果这样来计算,当滑动条的结点位置的数值大于目标数值时,得到的差值就是负数。
小练习:想想看,如果我们用人类的语言来描述这个问题,该如何接近呢?先不要想怎么用代码实现,先用普通话来描述一下怎么来解决这个问题。
好吧,哥又要唠叨一回了。在写代码之前,先想想在现实生活中会怎么解决这个问题,先用自己的语言来描述一下问题的解决方式,不管是四川话,普通话,广东话还是英语。如果你都没想清楚,那么写下来的代码肯定也是逻辑混乱一团糟。
我是这样来想的:
“如果滑动条的当前数值大于目标数值,那么它们之间的差值应该是滑动条的当前数值减去目标数值。
反过来,如果目标数值大于滑动条的当前数值,那么它们之间的差值应该是目标数值减去滑动条的当前数值。
最后,如果两个数值是相同的,那么它们之间的差值就等于零。”
用上面的方式来计算,无论两个数值的关系如何,最终的结果总是正数或0,因为我们始终用较大的数值减去较小的数值。
好吧,现在可以来点小学数学计算了。如果滑动条结点的位置在60,目标数值是40,那么差值就是60-40=
20。如果滑动条结点的位置在10,而目标值为30,那么差值就是30-10 = 20。
看,就这么简单。
术语党科普:算法
看到这两个字,很多人都要心惊胆战。莫说是产品和设计人员,哪怕是个资深的程序猿,听到算法这两个字都要肃然起敬,敬之如鬼神。传说中很多程序猿在面试的时候都因为算法题目不过关而被拒之门外。那么,作为非程序猿的你,是否看到这两个字就要打道回府,从此不再学编程了呢?
肿么办?不要忘了,在《苦逼程序猿的生存指南》这本书的第1页和最后1页都有同样的一句话。Don’t
Panic~不要恐慌!
正如很多绝症患者是看到医院的诊断书后自己被自己吓死的一样,很多准程序猿也是被代码世界里面的各种看似高深无比的术语给活活吓死的,从此和代码世界无缘。
那么,究竟神马是算法?如果哥告诉你刚才我们讨论的东西就是算法你会信我吗?不管你信不信,我反正是相信。通俗点说,算法就是用来计算某个计算问题的数学步骤。从这个定义出发,我们刚才说的加减法就是算法,只不过是比较简单的算法而已。
为了让你不再恐惧,下面再给个简单是算法流程示意图:
这也叫算法?是的,不要把算法看成洪水猛兽,它只是为了帮助我们解决某个特定的问题。
事实上,今天的苦逼程序猿要比上世纪的程序猿幸福的多。原因在于,在计算机科学的发展过程中,已经有很多NB人物为我们研究了各种各样的或高深或浅显的算法。实际上,大学里面搞计算机研究的大致分两派,一派专门研究计算机的硬件设计与开发,一派美其名曰计算机软件工程,实际上都是在研究新的算法。虽然在大学计算机系的课程里面,算法和数据结构算得上是真正的挂科屠夫了,但如果你不是想搞研究,或是进行一些大型的科学计算,大可以直接运用现成的很多算法。而且这些算法都有对应主流编程语言的源代码可供参考。
比较著名的算法有冒泡法,贪心算法,递归法,迭代法,分治法,动态规划法,分支限界法,回溯法,A*寻路算法等等。
在实际使用的过程中,通常我们要做的不是发明一套自己的新算法,而是根据所遇到的问题选择使用已有的算法。当然,一些比较简单的问题,比如我们这里的加减运算,我们可以直接绘制一个流程图来理顺自己的思路。
那么,当我们遇到某个需要通过计算才能解决的问题时,该如何下手呢?还是那句话,在开始写代码之前,先动脑筋思考一下。先试着用自己的川普把这个问题描述清楚(当然是在大脑里面,不是让你对着mm说出来),然后在纸上把解决问题的思路用流程图的方式画下来。如果一时想不出来,可以去看看NB人物已经设计好的算法。客观的讲,太阳底下没有新鲜事,以我们目前水平所遇到的问题,前人百分百都已经遇到过,大可以去直接借鉴。当然有一个前提是,即便是借鉴别人的算法和解决思路,我们自己也需要完全理解,起码要能看懂。
所以,写代码和写长篇小说有点类似,如果你在哪一块卡住了,不要对着电脑发呆崩溃,而应该转过身来看看窗外的风景,或者开个小窗口看看mm。同时在你的大脑里面想想应该怎样一步步解决这个问题,最好是拿出一张纸,把自己想到的思路用流程图的方式画出来。虽然程序猿的工作价值表面看起来似乎是体现在一行行的代码上,其实真正高效的程序猿更需要思考和在纸上写写画画。当你头脑中和纸上有了解决问题的方法之后,转换成代码就是轻而易举的事情了。
记住,程序猿的工作不是体力活,而是脑力活。一个高效的程序猿可以在很短的时间内通过思考,通过写写画画,通过借鉴前人解决问题的思路来处理所遇到的问题,效率堪比苦逼程序猿的10倍甚至更高。如果恰恰相反,你不幸就真成了所谓的码农。如果你认为自己是码农,那是因为你在偷懒,不是在键盘上敲打偷懒,而是自己在思考上偷懒了。
打住打住,话说还能跟得上哥的思维吗?
现在我们要回到正事了。回到当前这个游戏,我们需要计算玩家的得分。刚才哥已经用说话的方式解决了这个问题,现在该用代码来体现出来了。
对这个问题,可以用两种方式来具体实现,让我一一道来。
if (currentValue & targetValue) {
&&& difference =
currentValue - targetV
} else if (targetValue & currentValue) {
&&& difference =
targetValue - currentV
&&& difference =
这里我们遇到了一个和if有关的新代码结构。if就是如果的意思,else if
就是如果不是这样,而是如果... 其实你也猜到了,这种类似英语的描述方式告诉我们如何来进行判断。通常来说它的结构是这样的:
if (something is true) {
&&& //then do
} else if (something else is true) {
&&& //then do
that instead
something when neither of the above are true
我们在if后面的()括号里面放上了一个条件判断语句。如果判断的结果是true,也就是说currentValue的数值大于targetValue,那么就会执行花括号里面紧跟的代码。如果判断的结果不是true,程序就会查看else
if条件,然后再次进行判断。很可能我们会使用多个else
if,而程序就会从头到尾逐一进行判断,直到遇到某个判断结果是true的情况。如果没有一个结果是true,就会执行最后的else里面的语句。
在刚才的这段代码里面,首先我们创建了一个本地变量difference,用它来保存计算结果。我们希望这个数值是整数或者0,所以int类型的变量是符合要求的:
接着我们判断currentValue和targetValue之间的关系。
首先判断currentValue是否大于targetValue:
if (currentValue & targetValue) {
这里的&就是大于号的意思,江湖人称大于操作符。当currentValue里面所保存的数值大于targetValue里面保存的数值时,currentValue
& targetValue的判断结果就是true。
此时就会执行下面的语句:
difference = currentValue - targetV
我想这句代码基本上人人都能看懂吧,我们用currentValue的数值减去targetValue的数值,然后把结果保存在difference里面。和小学数学的表达一模一样,只是两边不是具体的数字,而是变量。
还要废话一句,你会看到这里哥用的变量名称其实是有选择的。
很多程序猿写的代码会是这样的:
然后下一个接手的程序猿就会感谢你八辈子祖宗,或者几个月后你自己对着电脑屏幕发呆,顾不上和mm的半夜约会了。
这个涉及到所谓的编码规范和编码习惯的问题。如果我们把代码世界里面的一切都看做生命体,那么起码你要给人家起个好听和有意义的名字吧。你爸妈给你取名字会随便用小三,小二,小十九这样简单但却毫无意义的名字吗?当然,不排除部分人的名字是这样的,比如张三很可能在家里排行老三。
无论是本地变量,实例变量,还是属性,包括方法名称,函数名称,我们都尽可能用一眼看起来就大概知道什么意思的名称。当然本地变量的命名可以稍微放松一点,但这样做也是没有坏处的。
继续回到我们的if条件语句。如果currentValue和targetValue的数值相同或是略小,那么currentValue
& targetValue
的结果就是false(Objective-C里面的术语,表示不正确),这个时候我们会忽略花括号紧跟的语句,而是直接切换到下一个条件语句:
} else if (targetValue & currentValue) {
同样的事情会再次发生,只不过这次targetValue和currentValue的角色颠倒过来了。只有当targetValue的数值更大的时候,才会执行下面的语句:
&difference = targetValue -
用targetValue里面保存的数值减去currentValue里面保存的数值,然后把结果保存在difference里面。
最后还有一种情况,就是两个变量里面的数值相等。也就是说我们的玩家太NB了,一发命中。这个时候的差值就是0.
&&& difference =
好了,我们已经搞定了人生中的第一个算法。
现在可以把它放到动作方法里面了。
在Xcode里面点BullsEyeViewController.m,然后修改showAlert方法的代码:
- (IBAction)showAlert
if(currentValue & targetValue){
difference = currentValue - targetV
&&& }else if
(targetValue & currentValue){
difference = targetValue - currentV
&&& }else {
&&&&&difference
&&& NSString
*message = [NSString stringWithFormat:
@"滑动条的当前数值是: %d\n我们的目标数值是: %d\n之间的差值是: %d",
currentValue,targetValue,difference];
&&& UIAlertView
*alertView = [[UIAlertView alloc]
initWithTitle:@"Hello, World!"
message:message
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
&&& [alertView
startNewRound];
updateLabels];
我们把差值的信息也放到了提示对话框里面。
现在点击Run运行一下看看。
辛苦了一天,又到发放福利的时间了。明天再见。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。社会化媒体
了解更多>>
桂ICP备 号
阅读下一篇
自媒体运营攻略
行业经验交流
Hi,在你登录以后,就可以永久免费的收藏任何您感兴趣的内容,关注感兴趣的作者!
手机注册或邮箱注册
点击按钮进行验证
请输入正确的邮箱
已有帐号请点击
帐号创建成功!
我们刚刚给你发送了一封验证邮件
请在48小时内查收邮件,并按照提示验证邮箱
感谢你对微口网的信任与支持
你输入的邮箱还未注册
还没有帐号请点击
点击按钮进行验证
你输入的邮箱还未注册
又想起来了?
你已成功重置密码,请妥善保管,以后使用新密码登录
邮件发送成功!
我们刚刚给你发送了一封邮件
请在5分钟内查收邮件,并按照提示重置密码
感谢你对微口网的信任与支持
对不起,你的帐号尚未验证
如果你没有收到邮件,请留意垃圾箱 或
意见与建议
请留下您的联系方式
* 留下您正确的联系方式,以便工作人员尽快与你取得联系
转藏至我的藏点让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第15篇
招聘信息:
使用web view替代 text view关于界面的内容还可以继续优化。现在我们可以尝试用web view(网页视图)来替代text view(文本视图)。在Xcode中切换到Main.storyboard,然后选中关于界面中的文本视图,用delete键删掉它。然后拖一个Web view到刚才的位置,并让它占据刚才Text view所填充的空间。web view(网页视图)顾名思义,可以用来显示网页。我们要做的就是给它一个到某个具体网站的URL网址。当然,这里我们会先让它来显示一个准备好的HTML页面。这样就无需联机下载才能看到内容。在Xcode左侧的Project Navigator(项目导航)点击项目名称,然后选中Add Files,把我们准备好的BullsEye.html文件添加到项目中。这是一个HTML5文档,当然你也完全可以创建自己的HTML5文档添加进去。从文件选择器中选择BullsEye.html,这是一个包含了游戏说明的HTML5文件。记得一定要选中Copy items if needed,以及Add to targets那边要勾选BullsEye。点击Add就把它添加进去了。最后在Xcode中切换到AboutViewController.swift,先添加一个outlet变量。import&UIKit
class&AboutViewController:&UIViewController&{
@IBOutlet&weak&var&webView:&UIWebView!
override&func&viewDidLoad()&{
super.viewDidLoad()
//&Do&any&additional&setup&after&loading&the&view.
override&func&didReceiveMemoryWarning()&{
super.didReceiveMemoryWarning()
//&Dispose&of&any&resources&that&can&be&recreated.
@IBAction&func&close(){
dismiss(animated:&true,completion:&nil)
}在storyboard文件中将UIWebView视觉元素和这个新的outlet变量之间创建关联。最简单的方式当然是按住Ctrl键,从About View Controller拖一条线到Web View。如果你反过来拖线的话会很失望的,不信试试看~接下来回到AboutViewController.swift,添加viewDidLoad()方法:override&func&viewDidLoad()&{
super.viewDidLoad()
//&Do&any&additional&setup&after&loading&the&view.
if&let&url&=&Bundle.main.url(forResource:&"BullsEye",
withExtension:&"html"){
if&let&htmlData&=&try?&Data(contentsOf:&url){
&&&&let&baseURL&=&URL(fileURLWithPath:&Bundle.main.bundlePath)
&&&&webView.load(htmlData,&mimeType:&"text/html",
&&&&textEncodingName:&"UTF-8",
&&&&baseURL:&baseURL)
}这一堆代码看起来又很恐怖,不过还是那句话,别恐慌。Don’t panic!我们先大概解释下它的作用。它的主要作用是把本地的HTML文件加载到网页视图控件中。首先我们在应用束中找到BullsEye.html文件,然后我们把它加载到一个Data对象中,最后我们让网页视图显示Data对象中的具体内容。点击运行游戏,然后触碰(i)按钮,就会看到类似下面的界面。在以上代码中,网页视图通过调用load:Data:MIMEType:textEncodingName:baseURL:这个方法来加载具体的网页内容。其中htmlData也即刚才生成的数据对象,MIMEType就是MIME类型,是指设定某种扩展名的文件使用何种浏览器插件打开,这里不多说textEncodingName是指字符的编码方式,比如UTF-8是指Unicode编码,可以显示中文,日文,英语,以及多种语言。与之对应的还有ASCII编码,它是专门针对英语设计的。看到这里,我们对刚才的这段代码应该有了更深的理解。首先,我们创建了一个字符串对象,让它保存BullsEye.html在文件系统中的路径。紧接着,我们创建了一个数据对象,让它保存BullsEye.html中的具体内容。接着,我们创建了一个URL网址对象,让它保存系统的主路径。最后,我们让网页视图以特定的形式来加载具体的网页内容。好了,假如我们这里不想用固定的网页,而是想直接显示自己的个人网站内容怎么办?很简单,用下面的这段代码代替就好:override&func&viewDidLoad()&{
super.viewDidLoad()
//&Do&any&additional&setup&after&loading&the&view.
//&if&let&url&=&Bundle.main.url(forResource:&"BullsEye",
//&&withExtension:&"html"){
//&if&let&htmlData&=&try?&Data(contentsOf:&url){
//&let&baseURL&=&URL(fileURLWithPath:&Bundle.main.bundlePath)
//&webView.load(htmlData,&mimeType:&"text/html",
//&&textEncodingName:&"UTF-8",
//&&baseURL:&baseURL)
let&myURL&=&URL.init(string:&"http://www.apple.com")
let&request:&URLRequest&=&URLRequest(url:&myURL!)
webView.loadRequest(request)
}我们注释了之前使用本地文件加载网页视图的代码,而使用真实的网址来替代。你可以试着使用Option键来查看帮助文档,来仔细研究下这段代码的具体含义。如果看不懂也没关系。点击Run看看效果:好了,该休息一下了~
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量5796点击量5478点击量4106点击量3904点击量3829点击量3733点击量3385点击量3308点击量3225
&2016 Chukong Technologies,Inc.
京公网安备89让不懂编程的人爱上iPhone开发(2017秋iOS11 Swift4 Xcode9版)-第2篇-GAD腾讯游戏开发者平台这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒这个人很懒...
让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第1篇
点击上方“程序员大咖”,选择“置顶公众号”
关键时刻,第一时间送达!
说明:本系列教程仅针对入门新手!已有iOS开发经验的请绕行~
本系列教程编译自iOS Apprentice:http://www.raywenderlich.com/store
适合看本系列教程的对象:
1.从未学过编程,或者对Swift语言一无所知,但要懂一些常用的英语单词
2.从未学过iPhone/iPad开发
3.喜欢苹果,充满想象力,喜欢创造,同时也愿意承受学习的压力,愿意投入时间和精力
如果你对iOS开发已具备丰富的经验,请不要在此浪费时间!
如果你只是想了解下Swift语言的开发知识,那么建议直接阅读苹果的官方文档,或另外一份教程(Swift开发入门系列教程)。
人天生就喜欢游戏,所以我们要开发的第一款应用不会是苍白无力的”Hello World”,而是一个小游戏,名为Bull’s Eye(拖拖看)。虽然这个游戏非常简单,但如果你从未接触过编程,可能还是会遇到一些困难。但是不要担心,即便你第一遍接触这些新概念的时候还有些含糊不清,但我们会在整个系列的教程中不断重复,直到它们成功的进入你的潜意识,甚至在梦中都不会忘记~
需要提醒大家的是,学习一门语言或工具的最好方式是练习和实践。因此,对于初学者来说,千万不要只是看过一遍了事,而应该自己手动敲入所有的代码,甚至故意修改其中的代码,刻意制造一些bug,然后想办法解决。而在学完本教程之后,要立即开始实战,同时多看苹果官方的示例代码和Github里的示例。不要害怕麻烦和错误,在解决麻烦和修正错误的过程中,你能更深入的领会为何要这样做,而不仅仅是简单的copy和paste。
在学习的过程中,会要求你自己做一些思考和练习,而不是完全被动的接受。仅仅知道前面有这样一条路和自己亲自走过这条路是完全不同的感觉。学习编程唯一有效的途径就是在思考的同时要自己写代码。
前面说了,本系列教程是针对完全的菜鸟来设计的。也就是说,哪怕你是个完全不懂编程的文科生,我们也有信心让你爱上iPhone开发。当然,如果你懂一点编程知识,学习起来会快很多。
处女座或强迫症患者必读:
如果你在第一遍开教程的时候有些东西不能百分百理解,最好的方式不是立即钻牛角尖死磕到底,毕竟你没有打过很好的编程底子,这样做会让你很快丧失信心,甚至很快放弃。碰到这类情况,哥建议你先把问题放在那儿(或者记下来),然后继续看下去。等到整个教程看完了,回过头再看你之前遇到的问题,如果还是不能理解,那么再看一遍。(其实90%的可能性是,等你回头再看当时觉得比相对论和量子力学还难理解的问题,现在就是小学加减法的水平)。因为在整个教程的学习过程中,我们会对一些重要的概念不断重复,直到你觉得跟吃饭走路一样自然。
如果说Objective-C曾经是学习iOS开发的最大障碍,那么这最后一点点担忧也不需要了,因为在2014年的WWDC上苹果发布了一个新的编程语言-Swift。 它可以让开发者在很短的时间里面轻松上手,如同javascript一样,与此同时它的性能又不会比Objective-C差多少,起码是在Java之上。
对当前的主流开发语言难度排个序,大致如下(从最难到最简单,比较主观~):
机器语言 &汇编& C++ &Objective-C & C, Lisp,Prolog&C# & Java & Python,PHP, Swift, Javascript, Ruby
正如刚才所提到的,对于汇编以下难度的语言,只要真正学懂一门, 再学其它的编程语言会轻松很多。毕竟在现实的世界里,真正的程序猿和攻城师很少只会一门开发语言的。只懂一门开发语言能活到现在的要吗是某个方面的顶级专家,要吗就是走了技术转管理的路线。
在我们的教程中,不会也不可能教你学习所有和iPhone,iPad开发的知识。iOS SDK(开发工具包)非常庞大,除了苹果的官方技术文档,市面上没有任何一个教材可以涵盖iOS开发的全部内容。我们只会教你了解Swift和iOS开发所需具备的核心基础。一旦你掌握了建筑技术,可以自己去探索iOS开发的其它细节。
除了Swift语言和iOS开发工具包的相关知识,我们最重要的目的是让你学会程序猿的思维方式。一旦你具备了这种思维方式,可以完成任何编程任务,不管是游戏,工具,网络应用还是其它你能想到的东西。作为一个程序猿,需要思考解决各种计算问题,并创造性的想出解决方案。一旦掌握了解决问题的方法,不论多复杂的问题都可以解决。这才是本系列教程的终极目的,让不懂编程的人爱上开发!
可以百分百保证的是,你在学习的过程中一定会遇到各种问题。程序代码中会出现无数莫名其妙的bug,让你不知所措。但即便是一个拥有30年以上编程经验的程序猿,也会经常遇到这样的问题。我们只是人类,而人类的大脑在处理复杂计算问题的时候总会出错的。不要害怕出错,但我们会提供一些思维工具,教会你如何填平自己挖的坑。
在我身边有很多人学习iPhone开发的方式是:
从大量的博客和网站中拷贝粘贴代码,而完全不理解这些代码的工作原理,以及该如何将这些代码嵌入到自己的项目之中。从网络中寻找解决方案是一种高效的工作方式,但你必须真正的理解这些代码的作用,才能举一反三。
在本系列教程中 ,我们从一开始就会学习如何构建真正的应用,而不是所谓的baby应用,或是仅仅为了学习目的而设计的简单示例。我们会详细解释其中的每一步操作,并附上丰富的图片帮助大家来理解。
通过这些步骤,你将在制作这些有趣应用的同时逐渐掌握编程的思维和技能。当你最终学完本系列教程后,应该已经掌握了Swift和iOS开发工具包的精髓。更重要的是,你应该学会了如何用程序猿的思维方式来编程和解决问题,并真正开始制作属于自己的应用。对此,我有百分之一千的信心!
当然,最最重要的是,希望大家在看完教程后,能够爱上iPhone开发,爱上用编程语言来创造世界的乐趣~
那还等什么,让我们就此开始吧!
iOS7, iOS8,iOS9, iOS10,iOS11…
时光飞逝,世事无常。自2007年1月Macworld上乔帮主那一次惊天地泣鬼神的演讲至今,竟然已经10年了!
10年过去了,乔帮主的音容笑貌仿佛还在眼前,只是,人面不知何处去,桃花依旧笑春风。
很感激Cook,在iPhone X的发布会上,他仍然把Steve Jobs的一段话放到了开头。
10年前,Nokia藐视群雄,Motorola和三星争斗不休,众多国产品牌手机和山寨手机还在华强北幸福的收割着打工者腰包里不多的毛爷爷。
10年后,Nokia亏损连连,被Elop的木马计成功收入微软旗下,继而又宣布放弃了这块业务。
Motorola早就被Google收入帐下,当年的手机三雄只剩下三星还在行业里兴风作浪。
早期混得风生水起的HTC也在最近将手机设计业务部门出售给了Google。
反观天朝,小米、魅族、华为一片混战,而采用农村包围城市战略的Vivo和Oppo手机则成功登顶国内市场。
不过回顾历史会发现,当天朝的土豪们占据市场主动的时候,就意味着一个行业发展到了高峰期,即将开始走下坡路了。比如从前的PC,比如再之前的家电,莫不如是。
苹果帝国好不容易占据半壁江山,却不幸遭遇王者的离去,在Tim Cook接手苹果之后,迟迟没有给大家提供足够的惊喜。
熟悉苹果的童鞋都知道,乔帮主总是会将一些重要的产品放在One more thing…上。
然而在Cook时代,除了数年前iPhone6发布会上的Apple Watch上用过这个标志性的惊喜宣言, One more thing…竟然从苹果发布会中消失了,直到今年。
除了硬件之外,苹果今年在技术创新了也着实拿出了新的东西。在2017年6月的WWDC上,苹果推出了针对虚拟现实开发的ARKit,以及针对深度学习和人工智能的Core ML。可以说,这两个SDK的发布,再配合iPhone X的诸多创新,确实很有可能引领未来十年的智能手机。
总之,如果对苹果开发感兴趣,那么入手一台iPhone X几乎是必然的选择。如果哪位朋友能确保买到,别忘了帮我一把~
还是谈谈iOS11吧。
其实上面要说的是,移动互联网行业的发展速度太快了,iPhone操作系统到现在已经到了iOS11。本系列教程将完全基于iOS11,并采用全新的编程语言Swift4。
既然是学习一门全新的工具,自然要从最新的版本学起,因此,iOS11+Swift4+Xcode9是我们的第一选择。
有舍才有得
学习iPhone开发不但可以作为一门兴趣爱好,同样还可以带来不错的收益(如果你能给用户带来不错的产品,或者找到一份提供给力薪水的工作~)。但天下没有白吃的午餐,进行iOS开发也是要花钱的。以下是你需要投资的:
1.一台iOS设备:
iPhone,iPad,iPad Pro,iPad mini或iPad Touch中的任一种。只用虚拟机永远没法学会真正的开发。当然,为了支持最新的iOS系统,就不要买太老型号的设备了,比如iPhone4之类的。
因为本系列教程将使用iOS11,所以大家也要了解下支持iOS11的设备:
iPhone 7 Plus
iPhone 6s Plus
iPhone 6 Plus
12.9-inch iPad Pro (2nd generation)
12.9-inch iPad Pro (1st generation)
iPad Pro (10.5-inch)
iPad Pro (9.7-inch)
iPad Air 2
iPad (5th generation)
iPad mini 4
iPad mini 3
iPad mini 2
当然,如果你希望在自己的应用中提供虚拟现实(ARKit)或人工智能(Core ML)相关的特性,那么就必须使用支持A9、A10或A11芯片的设备,具体来说是这些:
o iPhone 6s /6s Plus
o iPhone 7 / 7 Plus
o iPhone SE
o iPhone 8/ 8 Plus
o iPhone X
o iPad Pro
o iPad (2017)
个人建议直接购买可以支持ARKit的设备。
2.一台使用Intel内核处理器的Mac电脑:
需要安装最新的macOS High Sierra。建议电脑的内存在4G以上,否则你会很痛苦的。。。
有人说可以用虚拟机在PC上开发,我的建议是,宁可买一台二手的MAC,也不要用PC开发。否则,你会遇到各种莫名其妙的问题,而且对提高你的编程思维没有任何帮助。
对一般的入门开发者来说,如果不是同时还身兼设计师的重任,那么一台13寸的Macbook Air或Macbook Pro就可以满足要求了。
3.一个付费的iOS开发者账号
有了开发者账号,最简单的装B方式就是当苹果发布了新的beta版系统时(特别是大版本的更新,比如从iOS9到iOS10),你可以第一时间在自己的iOS设备或者电脑上体验。
当然,最重要的是可以将自己开发的产品放到苹果AppStore里面销售,赚取真金白银,当上CEO赢取白富美从此走上人生巅峰。
如何申请付费的iOS开发者账号
狠简单,直接到这里就可以了:
https://developer.apple.com/programs/ios
整个过程其实很简单,不过你需要先注册一个Apple ID,因为你的开发者账号会与之绑定。其实一年99美元的费用并不高,如果你是真心想学iOS开发,建议还是花了这笔钱。 而且苹果现在相当厚道的一点是,只要加入一个开发者计划,就可以为iOS设备,Apple Watch, Mac,Apple TV等苹果全系列硬件产品开发应用。而在此前iOS开发和Mac开发是两个完全不同的开发者计划,每个都要单独收费的哦~
当然,如果朋友们实在是吃了上顿没下顿,或者说只是想观望下,还不想花一毛钱。那么你也可以直接用自己的Apple ID来登录,同样可以免费使用Xcode开发工具,也可以在设备上进行测试。但是没法获得最新的Beta版本,更不可能将产品发布到App Store里面。
强大的Xcode
Xcode是开发iPhone应用的主要工具。Xcode带有一个文本编辑器,可以让你敲入自己的代码,同时还有一个可视化的工具由来设计应用的用户界面。Xcode可以将你编写的源代码编译成可执行的应用,并在模拟器(Simulator)或设备上进行测试。同时,Xcode还带有一个debugger(调试器),用于帮助你发现代码中的错误(很遗憾,目前它还没法自动帮你修复bug,这一天的到来还需要更给力的人工智能)
下载Xcode的方法很简单,直接从这个链接下载:
http://itunes.apple.com/app/xcode/id?mt=12
当然,最通常的做法是在Mac App Store里面搜索Xcode,然后下载安装就好了。
再次提醒,下载Xcode,Unity和Cocos2d-x等开发工具时一定要从官网下载,且只使用最慢的http下载链接下载,或使用官方的下载工具(比如Unity),不要使用任何第三方下载工具(比如迅雷之类的)。
如果你的操作系统不是macOS High Sierra,那么请先升级操作系统。
本系列教程用的Xcode版本是最新的Xcode 9.0(9A235),而iOS版本是10.3。
很多老的iOS教程还在用Xcode和iOS之前的版本,所以当你阅读那些教程的时候,请注意开发工具的细节差异。
关于计算机语言
语言是一种沟通工具。很多时候我们以为iPhone只是一部手机,其实它的内核是一个非常先进的微型计算机,只是同时具备打电话的功能而已。和其它计算机一样,iPhone是通过数字电路的0,1指令来工作的。如果我们编写软件在iPhone上运行,就必须把源代码翻译成计算机可以理解的0,1指令。
几十年前,人们不得不使用0,1指令和计算机直接交流。而随着汇编和高级语言的出现,大多数的编程语言变得更接近于日常生活所使用的英语。这样一来,人们更容易理解编程语言的使用。但同时也需要将人类可以理解的语言翻译成计算机可以理解的0,1指令。
举例而言,计算机内部会使用以下的语言:(不要关注其中的细节,你现在还看不懂):
事实上,计算机真正看到的指令如下:
上面的movl和calll指令只是为了方便人类理解。但即便如此,对我个人来说这种语言还是令人望而生畏。
今天的编程语言是下面这样的(先不要深入细节,看看而已):
void HandleMidiEvent(char byte1, char byte2, char byte3, int deltaFrames)
char command =(byte1 & 0xf0);
if(command == MIDI_NOTE_ON && byte3 !=0)
PlayNote(byte2 + transpose, velocityCurve[byte3]/ 127.0f, deltaFrames);
elseif((command == MIDI_NOTE_OFF)
|| (command == MIDI_NOTE_ON && byte3 ==0))
StopNote(byte2 + transpose, velocityCurve[byte3]/ 127.0f, deltaFrames);
elseif(command == MIDI_CONTROL_CHANGE)
if(data2 ==64)
DamperPedal(data3, deltaFrames);
elseif(data2 == 0x7e || data2 == 0x7b)
AllNotesOff(deltaFrames);
看到这里或许你才有点感觉了。即便你没有任何编程经验,但只要懂英语,就大概能判断出上面代码的意思。以上代码是从一个音效同步工具的程序中截取的。它使用C语言编写,这门语言是上世纪60年代开发的,人们用它开发了著名的Unix操作系统(今天所有操作系统的鼻祖,包括Windows,Mac,Linux)。当然,iOS的内核也是基于Unix系统的。
而这里我们要着重提一下苹果的新编程语言Swift。Swift集成了传统面向对象编程语言的特性,同时又具备函数式编程的一些特征。如果你曾经学过C#,Python,Ruby或者JavaScript,那么会发现Swift有很多相似之处,很容易上手。
在2014年WWDC之前,用来开发iOS应用的语言被称为Objective-C,它是标准C语言的扩展。使用Objective-C可以完成C语言所能完成的任何工作。同时它还添加了很多有用的特性,比如最重要的面向对象编程(Objective-Oriented)。Objective-C在前些年可谓门庭冷落,无人问津,除了铁杆的Mac粉丝,几乎濒临灭绝。但随着2007年那一次伟大的iPhone产品发布后之后,几乎要被历史遗忘的Objective-C语言再次进入人们的视线,甚至成为今的主流开发语言。Objective-C是年的年度编程语言No.1。
目前仍然有大量的iOS项目使用Objective-C开发,毕竟一个新的编程语言普及需要几年甚至更长的时间,不过iOS开发的未来显然是属于Swift的。
这里不得不提到C++语言,事实上C++和Objective-C语言几乎是同时出现的。和Objective-C语言的简洁不同,C++语言几乎包含了所有可能的特性。作为一门编程语言,它非常强大,且执行效率超高。事实上,所有的操作系统,以及大量的网络游戏,主机游戏和PC游戏,游戏引擎都会使用C++来开发。C++的问题在于,对于一个新手来说,它异常复杂,包括了基本语言结构,面向对象开发和模板、标准库等诸多内容。学习C++还是颇有难度的,仅次于汇编语言。不过C++11(2011年的新标准)这一C++的最新版本在很多方面做了大的改进,相信会让这门“古老”而又强大的编程语言更加褶褶生辉。
在进行iOS应用或游戏开发的时候,我们可以混合使用C,C++和Objective-C(简称为Objective-C++)。
此外,Facebook在2015年开源的React Native可以使用Javascript开发原生的iOS和Android应用。但是目前因为授权的问题,React受到众多开发者的抵制。所以虽然很多公司的项目用的是React,作为新手的你也可能经常听人提到,但是,谨慎考虑是否用它。
对于iPhone手机游戏开发来说,由于Cocos2d-x引擎的迅速普及,C++的使用频率也大大增加。此外,主流的3D商业引擎Unreal Engine4使用的就是C++语言。而另一个主流的手游开发引擎Unity则主要使用C#和Javascript脚本语言。
总之,对于iPhone应用开发来说,最主要接触的语言是Swift和Objective-C,部分情况下也会用到C++和C,以及javascript等脚本语言。
考虑到本教程的很多读者从未接触过任何编程语言,这里对其它几个主流语言的特点和作用稍微说明一下:
Java语言是当今最普遍使用的开发语言,它简单易学(相对C++,C和Objective-C),且跨平台性非常强,对网络开发的支持令人称赞。很多企业使用Java语言来开发商业相关的网络应用。此外,Java语言也是开发Android应用的必备工具。
C语言是几个主流开发语言(Java,C++,C#,Objective-C)的根基所在。常有人说,学好C语言,其它的语言就会一通百通。因为对硬件底层性能的支持超强,它的主要应用领域是嵌入式开发、游戏引擎开发等偏底层的部分。C语言基本上已经取代了汇编语言和机器语言在底层开发的作用。
PHP语言主要用于开发网络应用(特别是web服务器端,也就是用户不可见的部分,如结合MySQL进行后台数据传输处理等),相对其它几门语言,它非常容易上手。但它的局限性在于除了web应用,对其它应用的开发力不从心。
Javascript语言主要用于开发Web前端(也就是用户可见的部分),随着HTML5技术的兴起,Javascript语言必将是未来三到五年的主流Web开发工具。在主流的3D游戏开发引擎Unity中,同样支持使用Javascript作为脚本编程语言。此外,Facebook的开源项目React Native可以让开发者使用Javascript语言轻松开发原生的iOS和Android应用。
C#语言是微软为了对抗Java语言的强势而自行开发的一种编程语言。它和Java一样简单易学(同样是相对的),但只能支持微软的平台。闻名业界的.NET就是C#语言的最佳搭配。但随着微软在移动互联网领域的式微,C#的地位和前几年比起来大有下降。
不过虽然.NET和C#在Web开发领域的空间越来越小,但C#也有新的应用领域,目前最火爆的移动平台3D游戏开发引擎Unity3D主要支持C#和javascript开发,而windows手机平台的卷土重来也让C#有了新的机会。
Python,Ruby,Perl同PHP语言的作用类似,属于脚本语言,对于开发网络应用非常高效。其中Python和另一种脚本语言Lua还常在游戏中作为脚本语言使用。
对于Python要特别补充一点,在2016年下半年开始异常火爆的AI(人工智能)技术中,特别是深度学习等领域,科学家和开发者大量使用Python语言和相关框架。曾经的超轻量级脚本语言在一个超重量级的应用领域重获新生,而且越来越受人欢迎。
Go语言,一门全新的系统级语言,由Google开发,于2009年发布。虽然它的历史非常短暂,但根据目前的发展来看,Go语言有望在未来十年成为一款成功的系统级语言。Go语言功能强大,可以替代C++。
在TIBOE2017年最新的编程语言排行榜上,Go语言已经从去年的38位急速攀升到14位。
Basic(Visual Basic)语言,曾经风骚一时,若干年前很多编程入门课程必教的开发语言。其学习曲线非常平缓,易于上手,但实际项目中用到的不是很多。
SQL语言,这是目前最重要的关系数据库操作语言,其影响已经超出数据库领域,在很多其它领域得到采用,比如人工智能领域的数据检索,软件开发工具中嵌入SQL的语言等。SQL语言是一种交互式查询语言,允许用户直接查询存储数据,但它并不是完整的程序语言,没有DO或FOR类似的循环语句,但可以嵌入到另一种语言中,通过接口发送到数据库管理系统。
汇编语言,虽然现在是高级编程语言的天下,但性能超强的直接面向硬件的汇编语言仍然在嵌入式开发领域占据着一席之地。只是汇编语言和硬件本身的关联很大,所以普及性一般。目前汇编语言的江湖地位已被C语言替代,但在某些领域还有自己的一席之地。
Kotlin语言,Google推出的一门全新的编程语言,用于在Android应用开发中取代Java的地位。
其它语言相对来说比较冷僻,或者曾经热门但如今使用的人很少,用不到的时候可以不管。
为了让大家对各种编程语言的江湖地位有所了解,不妨看看TIOBE 最新的2017年9月编程语言排行榜~
2014年9月的时候,苹果的御用开发语言Objective-C是Top3的编程语言。但是自从2014年苹果WWDC上发布了新的Swift语言后,Objective-C的排名迅速下降到如今的Top18,而Swift则上升到了Top13。
科普知识到此结束,我们不打算对Swift语言的特性做详细的介绍,不然很可能5分钟不到你就睡着了。我们将在创建项目的过程中一步步解释你所遇到的语言。包括什么是变量,什么是对象,如何调用方法(发送信息)等等。
当然,如果你需要一本随时可以查询的工具书,我们强烈推荐苹果的官方Swift指南。
好了,有了这么多的基础做铺垫,我们可以进入正式的开发了!
作者:王寒
链接:https://zhuanlan.zhihu.com/p/
程序员大咖整理发布,转载请联系作者获得授权
没有更多推荐了,}

我要回帖

更多关于 游戏编程要学多久 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信