我6个月的学习苹果编程经历:从”大齿怪“到“狂欢者”

别再乱解压APK了!手把手教你用Apktool 2.4.1正确反编译Android应用(附常见错误排查) 本文详细介绍了如何使用Apktool 2.4.1正确反编译Android应用,避免直接解压APK导致的乱码问题。从环境配置到完整反编译流程,再到常见错误排查,手把手教你掌握Android逆向技术,提升逆向效率。 阅读详情

本文是从 My First Six Months of Programming: From Man-Rodent to Partyman 这篇文章翻译而来。


我是菜鸟

几乎刚好是6个月前,我决定开始从事一项新的职业。2010年10月之前,我从未接触过编程。要说有,那也只是在6年级时学过了大概一周的非常基 本、基本、基本的编程知识。就这些。我不知会学成什么样。2010年10月9日我在微博上写道:“我究竟想干吗?我决定学习编程,我没有任何的基础。唉, 兄弟们,我有些担心。”这是一段生涯的开始,我很高兴能走上这条路。我不会回头。

开端

我将只快速简单的给你们讲一下我前几个月的学习过程,因为这段时间非常的枯燥。我从Invent with Python这本书开始,这是一本对新手来说非常不错的教程。为了让你们知道它是如何的初级,我向你们展示这本书里的一段话:

+ 这个符号是来告诉计算机把2和2相加。做减法用这个符号 -,做乘法用星号(*)。

在我学会了一些非常基本的知识后,我随意的做了很多文本形式的小游戏,比如刽子手,jotto,猜数字。我的第一个比较大一点的小玩意叫做“大齿怪”。这个游戏的情景是关于一个大齿怪(就把它想成一个怪物吧),祸害村里。它藏在什么地方,你需要去猜它在哪:

也就是在此时我收到了我的第一张珍贵的粉丝画的作品。我把这个游戏发布在了Reddit上,Michael Hussinger为它制作了这张令人惊叹的封面画:

接下来,我转移到了我的第一个半图形游戏:”扫雷“。在此时我才开始真正的理解构造一个灵活的游戏引擎有多么的重要(没错,就像我开发的这个游戏引 擎)。这个游戏仍然是文本形式的,但已经有相当的灵活度了,在这个游戏里,我可以指定布景的大小和地雷的数量。这样一来游戏就可以从头再玩,你可以把地雷 数量设置很小而很快能看到游戏的结果,这样有趣多了。下面就是这个游戏:

弹出

欢迎使用苹果iOS

此时,我已经感觉到应该转向真正的图形游戏了。我感觉陷入了僵局。我根本不知道从哪里入手。我研究了一下SDL,这个东西超过了我的接受能力,我很快放弃了。因为我知道最终我想做iPhone应用程序,我请教了Matt Rix (Trainyard),他给了我一些很好的建议。他建议我从学C语言开始,然后学Objective-C,然后Cocos2d。今天说起这些我很快高兴,这三种语言我都学会了,虽然很基础。

在学习C和Obj-C时,我遇到的大量的挫折,我没有做出多少游戏。很多次,我真的怀疑是否能渡过难关、找到出路。很多东西当我第一次看到时愁得我挠掉了很多头发:结构体,数组,多维数组,属性,表现层,控制层,协议和代理,内存管理,还有很多。很多东西我目前仍然无法理解领会。但是我坚持继续下去,我对很多人都说:让自己进步的唯一方法就是不断的做游戏。我十分清楚,想成为钢琴家,练习时根本,所以,这也是我需要的(我就持续这样下去)。

欢迎使用Cocos2d

一旦我最终把iPhone应用的基本知识攻克下,我立即开始研究Cocos2d。我很紧张,也很兴奋。现在,我不知道自己是太挑剔还是太笨,我感觉 Cocos2d的文档写的不太好。所有的类,方法,属性都列出来了,但却很难让人读懂,它们解释的不太清楚。一个例子:每个”node“(Cocos2d 的主要元素)都有一个”(BOOL) isRunning“属性。看起来非常的简单,但它似乎能够表示任何意思。所有的文档对这个属性的解释都是:”标志这个node是否在运行。嗯,ok … 不用说,Cocos2d里面有很多东西我都十分的困惑。

尽管这些的不满,我还是非常喜欢Cocos2d。一旦掌握了一些基本知识,我就开始研究它如何能够容易的做出一个简单游戏,让它马上能跑起来。我已经知道了如何做音乐和声效,我还知道一些Photoshop,我就真的开始要让它输出一些很酷的结果了。起初我对Cocos2d很困惑,我从Ray Wenderlich的一些非常棒的教材开始学习。

我开发的各种暂且算是游戏的游戏

下面的是我的第一个Cocos2d游戏,它是我直接按照Ray的教材开发出来的(我在里面还加上了我的音乐和当一个敌人被消灭时的很傻的音效!):

接着,我仿制了一个Pong。这个游戏还可以多人参与!:

Pong之后,我受到了鼓舞,决定开发Tetris。这是个巨大的错误。我根本没有准备好。我遇到了各种让人懊恼的错误和问题,当我最终把框架搭起来后,我在微博上写了这样的话:“我很骄傲。我为我的Tetris仿品开发了一个真正复杂的类/子类系统。”Noel Llopis很快的告诉我,说我的决定十分的错误。我搜集了一些教材,试图好好的修改一下这个仿Tetris游戏,但太困难了。我决定放弃,但有一天我会打败你的,Tetris!

这次Tetris失败的尝试之后,我受Tilt to Live的启发做了一个游戏初始原型,我计划在这个游戏里,你需要去收集红点来获取积分,而不是像其它游戏里去避开它们。现在做的这个里面并没有加入真正的游戏里面会有的音乐:

学习了更多的Cocos2d之后,我突然来了灵感要做一个循环的褶皱纸样式的背景。于是把一张纸做出褶皱型,以循环方式填充背景。然后我在上面放了 一个小圆片,你可以用加速器让它在上面滚动。当我弄明白如何让这个小圆片滚动后,我为自己能做出这个东西很自豪,因为这牵涉的一些数学知识,我并没有用很 久的时间就把它能明白了(尽管只是一个很简单的几何问题)。背景很难看 —— 但很好用:

接着,当我看到了即将发布的游戏Bumpy Road的令人惊讶的海报后,我受启发,心想是否能够也做一个跟里面的高高低低的路面相似风格的游戏元素。很显然,我的做图水平很有限,你可以比较一下。

Bumpy Road:

我的版本:

这之后,我想在真正的动画上试试身手。以前从没有做过动画,先在Photoshop试试。人物的制作很乏味冗长。即使是画一条很傻很短的线条也很费 劲。但我还是完成了,我把他称作“狂欢者”。他能做的就是一遍遍的张开和闭上他的大嘴,每次都随机的发出一些哼哼声。你还可以在屏幕上移动他。背景闪动不 同的颜色。当你触碰屏幕时,他只能哼哼和张嘴:

然而,“狂欢者”有了一小队粉丝。这些粉丝的头像图标里包括Mario, Link, Samus,等等。事实上我把这个游戏发给了Touch Arcade的Jared(嘿,是他向我要的)。之后,让我大吃一惊和无比高兴的是,Retro Dreamer的Craig Sharpe创作了我的第二张正规的粉丝的艺术作品!下面就是Craig为“狂欢者”创作的杰作:

他的作品是如此的优秀,我甚至把它放入了我的下一个游戏里。但起初,我突发奇想,要做一个跳杆子的游戏。起初的出发点只是为了使用一个简单的游戏技 术测试一下视差背景的效果,但做下来就做成了这个游戏。最终的游戏有一个小屏幕,有记分功能,有重玩功能,有音乐、音效,各种跳跃高杆,有一个高度指示 器,甚至还有一个鸣谢页面!它是我的功能最全的一个游戏。我在游戏里画了一些非常丑陋的精灵,就像你下面看到的:

因为画的太差,我询问Michael Hussinger是否愿意为我做一些简单的修改,他同意了!他在二十分钟内就画出来一个让人惊叹的匹萨伙计。我估计花几个小时也画不出这么好的作品来。他还为游戏中的视差效果画了一个漂亮的山作为背景。下面的就是在他的帮助下游戏的样子,我加上了标题和鸣谢页:

游戏运行中!

弹出

我的下一个游戏受Trainyard的 启发。我想看看是否能做出 一个地图,上面画些网格道路,卡车能跑在上面。看看,制作“狂欢者”有了很好的回报。所以我称这个为“狂欢大巴”。游戏的玩法就是点击地图上的一个地方就 设定一个聚会点(一个闪烁的,颜色变换的点,伴有音乐),然后图上会画出一条路,通向这个点,“狂欢者”会把他的“狂欢大巴”开到那里。不用说,这是一个 非常简单的游戏。但里面很酷的东西是,当他到达目标地点后,音乐声会变大,卡车会开始跳舞,Craig画的作品会出现在开车上面左右摇摆!

代码写的很乱,有很多问题。我让弟弟试玩了一下,他式了三次,什么都没干成,他总是每次都是在错误的时间点击到错误的地方,这样游戏根本就不能正常 玩下去。每次我都要从头开始玩这个游戏,因为我没有给它加入“重新开始”的功能。但我还是挺为这个Trainyard的复制品感到自豪的。Matt应该为 此感谢我。

我的下一个项目是要做一条蛇。我发现了这个如何用flash做出一条蛇的教程, 我只需要把它移植到iPhone上。这个教材让我明白了很多如何做这种游戏的内幕。之前,我计划让蛇每一帧移动一次,但在如何让蛇尾和蛇身保持一致的问题 上遇到了很多的麻烦。我本打算建一个数组存所有历史动作,蛇尾将按照这个数组里的信息做它的每个动作,但这样一来它动的太快,让人很不舒服。这个教程整个 颠倒了我的思维,我意识到蛇其实根本没有动。这种看起来在移动的视觉效果其实是简单的在帧上添加和移去一小段蛇身产 生的。这样,当你捡起一 个苹果,所需要做的只是告诉程序不要删除任何片段。事实上我需要重新写这个程序,因为界面太难看了,控制的也不好。因为我是移植过来的,代码写的很乱。但 事实上作为一个基本的游戏来,它还是很不错的!

在完成这条蛇之后,我打算制作“狂欢大巴2”:“狂欢者”的周末狂欢。我把上一版升级了一些。我在里面加入了一些Trainyard里面的速度条, 一个车站,车可以从里面开车,一些声音特效(当他被碰着时会出现很大的汽车相撞的声音,而且会喊出“今天没有活动!”),程序也整理的更整洁了。但没多 久,程序又开始变乱,当我要纠正一个问题时,另外一个东西又出现了问题。最大的问题是当我把速度设成最大时,卡车会在路上某个点崩溃。这是因为更新调用的 太频繁,程序来不及在下一次调用前更新完。尽管我知道这个问题的原因,如想修复这个问题需要重做大量的东西。我想我需要升级到“狂欢大巴3”:最后的狂 欢。

我最近的目标是重做Doodle Jump。目前为止一切进展顺利。里面很多小平台,移动速度会约来越快,一个会跳的小人,一些其它物品(目前为止只有一个弹簧),自定义音乐和声效,以及完全从原作里拷贝的背景。目前为止我对做出的东西很高兴。我会继续往里面增加很多的东西。

结论

练习给人带来的进步是惊人的。每次当写出一个新程序,我都会遇到大量的无法预知的问题和bug。当遇到挫折时,我一般是将问题移到下一次升级时解决。这让我感觉自己就在走一个while循环:

while (编程技术仍然很糟) {
      练习时间++;
      程序 * 新程序 = [程序 程序类型:游戏];
      if (新程序.做的很好吗 == 是的 && 练习时间 >= 大量) {
          编程技术仍然很糟 = 否;
      }
  }

我会一直这样制作下去,一转眼就到现在了,我几乎等不及想知道再6个月后会是什么样。请下次当我来述说如何给Casey’s Contraptions制作音乐(和一些声音)时,请记住一定来看看!

0
转载自:外刊it评论网
50、压电微泵与技术设备驱动的研究分析 本文研究了压电微泵在弹性微通道中的流体流动特性及技术设备驱动的振动行为。通过建立轴对称流固耦合模型,利用FreeFem++进行数值模拟,分析了不同数量压电致动器和频率对微泵流量的影响,发现多个致动器按特定时序压缩可产生净正向流量,并提出了稳态流量的近似解析公式。同时,针对技术设备驱动系统,探讨了周期性负载引起的强迫振动特性,明确了共振条件及影响因素,并比较了主动、被动和优化设计等振动控制策略。最后展望了实验验证、多物理场耦合与智能控制等未来研究方向,为相关设备的优化设计与高效运行提供了理论支持。 阅读详情

相关推荐

保姆级教程:用Vue3+Element Plus快速搭建Flowable流程定义管理后台界面

本文提供了一份详细的Vue3+Element Plus教程,指导开发者快速搭建Flowable流程定义管理后台界面。从项目初始化、核心页面设计到响应式数据处理,全面覆盖前端开发关键步骤,帮助提升企业级应用开发效率。

weixin_42662293的博客 479

解决错误 C3863 不可指定数组类型

解决错误 C3863 不可指定数组类型“int [column_count]”,要用指针,不能直接定义长度

weixin_52047565的博客 6971

【Unity】入门教程第一期-下载安装Unity编辑器(下)

讲解如何在Unity Hub中下载Unity编辑器以及IED环境

Xiaoxin的博客 2040

vs2017 C3836 不可指定数组类型错误分析

vs2017下报出C3863错误 编译器错误 C3863Compiler error C3863 数组类型 "type" 不可赋值 该问题是由于字符类数组已经赋值过来,变量在常量区已经储存。如果要再次修改该数组内容。需要使用拷贝函数strncpy对数组内容进行更改。 ...

qq_41350775的博客 9361

调试GMS应用,报错“此设备未获得play保护机制认证”问题解决

不少同学在调试GMS相关应用时,需登录Google账号,有时会弹出如下通知。Google登录界面也会出现如下提示这个报错的原因是设备未通过Google认证,google服务器未配置荣耀设备的型号白名单导致国内网页有一些指导方法在鸿蒙\荣耀的设备上消除这个提示,但本质的问题没有解决,无法登录Google账号。

胡同老道的博客 2万+

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1585

C3863 不可指定数组类型“int [510]”

原因是我定义了一个二维数组 int e[510][510]; 而在使用fill对数组初始化时,并没有采用二维数组初始化的方式,而是写成了: fill(e, e + 510 * 510, inf); 正确写法应该是: fill(e[0], e[0] + 510 * 510, inf); 转载于:https://www.cnblogs.com/kazama/p/10897081....

aiua81263的博客 9975

微信小程序视频内容服务类目审核不过?绕过审核的两种思路!

虽然不推荐绕过官方审核,但在实际项目中,总有一些特殊情况:比如,最近开发的小程序涉及视频播放,提交审核时,被官方要求补充“教育服务 - 在线视频课程”类目。但我们的内容只是车辆使用介绍,并非教育课程,无法提供相应资质。该怎么办?很多开发者发现,小程序开发不是最难的,审核才是最难的。 微信为了规避法律风险,要求某些功能必须提供资质。例如:然而,并不是所有公司都能轻松申请到这些资质,甚至有些资质根本不适用于我们的业务,导致审核卡住,无法上线。就像我遇到的这个问题,官方要求我们补充“在线视频课程”类目,但实际业务

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3244

qt error: C3863: 不可指定数组类型“unsigned char

qt error: C3863: 不可指定数组类型“unsigned char

weixin_66212650的博客 2057

基于STM32F1XX 、HAL库的OPT4001-Q1环境光传感器驱动应用C语言程序设计

OPT4001-Q1 的输出是半对数 的,具有 9 个二进制对数满量程照度范围,每个范围内具有高度线性响应,使得 PicoStar™ 型号的测量能力为 312.5μlux 至 84klux,USON 型号的测量能力为 400µlux 至 107klux。// 禁用中断(示例)

PP_Cottage的博客 461

Transformers 实战修炼与源码剖析专栏大纲

本专栏以 Hugging Face Transformers 为主线,围绕“能用、会调、敢上线、懂源码”四个目标展开。内容不把理论堆成公式墙,而是用真实或拟真的业务场景驱动:客服分类、合同抽取、知识库问答、模型微调、推理服务、监控告警、源码扩展等。采用“业务痛点 → 三人剧本对话 → 代码实战 → 总结思考”的四段式结构,让读者在动手完成一个个小项目的过程中,逐步理解 Tokenizer、Model、Pipeline、Trainer、Generation、PEFT、Accelerate、Serving等概念

davidwang456的专栏 922

#include <string>

1 append(string T&);字符串拼接 2 c_str string.c_str是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。 3 empty();判断是否为空 4 erase 删除 5 find 在字符串中查找Find content in string 6 find_first_not_of Find absen...

B1334628598的博客 1275

一条 POST 创建整棵业务对象树,SAP Gateway Deep Create 的运行机制与 ABAP 实现

SAPUI5 的 OData V2 Model 支持 Deep Create,可以为一个新建的 transient parent context 创建 Navigation Property 下的 subentity,并把这些子实体的数据合并进 Root Entity 对应的 OData 请求 Payload。销售组织是否合法,客户是否允许下单,物料是否存在,销售区域是否匹配,计量单位是否正确,项目类别如何确定,定价是否成功,合作伙伴如何派生,交货工厂如何确定,这些都可能在一次创建过程中被触发。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 146

我6个月的学习编程经历:从”大齿怪“到“狂欢者”

转自http://www.aqee.net/first-six-months/  未经对方许可 [本文英文原文链接:My First Six Months of Programming: From Man-Rodent to Partyman ] 我是菜鸟 几乎刚好是6个月前,我决定开始从事一项新的职业。2010年10月之前,我从未接触过编程。要说有,那也只是在6年级时学过了

sndnyangd的专栏 1854

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

iOS游戏开始者从零开始 6个月的学习编程经历

iOS游戏开始者从零开始 6个月的学习编程经历

qq_44929301的博客 1559

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

iOS游戏开始者从零开始:6个月的学习编程经历

这是一个毫无编程经验的菜鸟在成长为 iOS 游戏开发者后,总结的成长史。短短6个月间,他从 Python 入门,发展到给 Mac 开发小游戏,再到自学 Objective-C 和 Cocos2d。       这是一个毫无编程经验的“菜鸟”在成长为 iOS 游戏开发者后,总结的成长史。短短6个月间,他从 Python 入门,发展到给 Mac 开发小游戏,再到自学 Objective-C 和 C

AMinfo的专栏 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

从零开始:6个月的学习编程经历

这是一个毫无编程经验的“菜鸟”在成长为 iOS 游戏开发者后,总结的成长史。短短6个月间,他从 Python 入门,发展到给 Mac 开发小游戏,再到自学 Objective-C 和 Cocos2d。除了你可能已经读过无数次的励志元素,文中的书籍、网站推荐以及开发过程中的经验教训总结很值得打算或刚刚进入苹果开发领域的新人一看。 我是菜鸟     几乎刚好是6个月前,我决定开始从事一项新

966

python制作ios游戏_6个月从“菜鸟”到“牛人” iOS游戏开发者成长记

这是一个毫无编程经验的“菜鸟”在成长为 iOS 游戏开发者后,总结的成长史。短短6个月间,他从 Python 入门,发展到给 Mac 开发小游戏,再到自学 Objective-C 和 Cocos2d。除了你可能已经读过无数次的励志元素,文中的书籍、网站推荐以及开发过程中的经验教训总结很值得打算或刚刚进入苹果开发领域的新人一看。我是菜鸟几乎刚好是6个月前,我决定开始从事一项新的职业。2010年10月...

weixin_39882870的博客 1133

我6个月的学习编程经历:从Man-Rodent到Partyman

导读:原文来自whitakerblackall.com一篇《My First Six Months of Programming: From Man-Rodent to Partyman 》,译文由外刊IT评论整理编译《我6个月的学习编程经历:从Man-Rodent到Partyman》。我是菜鸟几乎刚好是6个月前,我决定开始从事一项新的职业。2010年10月之前,我从未接触过编程。要说有,那也只是...

weixin_34400525的博客 117

用苹果手机做c语言作业,c for ios好用吗,就是苹果手机上的一个C语言编程APP

这种东西的原理就是把程序发往服务器,然后把服务器上的运行结果取回来,它与实际的开发环境相比功能很有限,要求不高的时候可以用。苹果手机和平板本身就是玩具。可以下载,在appstore里面搜索:c++ programming;这个比安卓手机的c4droid还稍微好用一些,不过说实话,还是用不惯,不如电脑上方便。如何学习软件编程:1、要对计算机基础知识要有所了解,建议买本计算机基础书看看,如果你有自己的...

weixin_34418334的博客 6414

13 岁编程!少年比尔·盖茨如何成为最成功的自学成才程序员?

【优快云编者按】自1987年以来,比尔·盖茨首次出现在福布斯全球富豪榜上,就开始了他的辉煌时代。科技上,他建立起了微软这个庞大的科技帝国;慈善上,他捐赠了数十亿美元用于...

优快云资讯 5168

iOS中的网络编程基础(一)

基本概念 客户端:移动应用(iOS、android等) 服务器:为客户端提供服务、提供数据、提供资源的机器 请求:客户端向服务器索取数据的一种行为 响应:服务器对客户端的请求做出的反应,一般指返回数据给客户端 URL(Uniform Resource Locator) 通过一个URL,能找到互联网唯一的一个资源 URL就是资源地址、位置,互联网上每一个资源都有唯一的URL 格式:...

骑驴找马追骆驼_so的博客 650
上一篇: 如何在25步之内开发出一个网站
下一篇: [Android实例] Android Service 服务详细讲解
android_panda
博客等级 码龄15年 28粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值