程序开发的1点小总结, 给要学习1门新语言的朋友1些帮助, :P
1.多项条件下的处理
第1种方法: 每一个需要履行A函数的条件下都写1边A函数调用, 这类方式也是最中规中矩的写法, 代码相对臃肿, 如果A有任何变动, 就要修改多处, 这类代码块写多了, 容易漏掉
第2种写法: 在B条件挑选前, 创建1个临变量布尔c, 用来监控需要A函数需要的条件, 需要就为true, 不需要就不写(默许初始false), 这样在条件结束后, 再对c进行判断, 然落后行1次性处理A函数.
第3种写法: B条件自己去处理需要的挑选, 然后针对A再进行挑选1次, 不需要临变量
(以上其实不讨论if和switch的效力, 任何方案依照自己顺手的来就好)
2.延迟函数
先看条件, 屡次触发同1条件, 1般都来自多个对象对本对象的响应酿成的, 此时响应的次数多是已知的, 也多是未知的
对已知数目的做法: 在B条件下进行计数, 计数到达要求, 再激活A函数
不过1般最好的方案就是延迟A的履行, 由于这类做法, 既不会频繁的调用A, 也不会致使A响应过慢, 等1系列问题, 这类方法, 只需知道连续的序列激活条件的间隔最大时间就好, 1般这类响应要不就是相差1个步长, 要不就相差几10毫秒, 相差1个步长很简单, 延迟设置为0便可, 由于延迟函数本身就是创建后在下1个步长履行, 所以, 在比如连续的for循环里面直接设置延迟为0就ok, 固然在for这样可控的函数, 还是尽可能不要做延迟的写法 :P
固然, A函数如果被延迟, 又会触及到很多方面的问题, 比如:
a.调试的时候是完全没法追溯的, 如果触及延迟调用的地方比较多, 出了问题, 很大可能会致使调试的艰巨, 体现在断点向上追溯只追溯到delay方法, 连调用delay的函数是甚么都很难肯定, 这也是语言比较弱的地方, 你只能搜索所有调用delay A函数的地方, 设置断点来提早追踪
b.延时函数其实不会引发线程级的问题, 毕竟还是同1个线程, 但是还是要谨慎, 在delay以后可能存在万种可能, 乃至函数本身都不存在都有可能, 它存在很多不肯定性, 如果需要处理1些参数, 最好还是和delay函数1起托家带口奔走吧
delay函数相当的实用, 我在这里其实不讲具体delay怎样实现, 代码如何, 每种语言都有自己的延时函数, 大家自己去揣摩吧
3.周期履行函数
我觉得在接触1个语言, 第1要熟习它的写法如何打log, 第2就要知道周期履行函数这类有趣的设定, 它能实现很多很成心思的事情, 可让参数动起来, 可让图形动起来, 可让程序动起来, 总之就像程序的发动机1样
周期履行函数, 有固定周期和可调周期两种, 唯1区分是, 如果你使用了周期过于频繁的沉重处理, 可能会累坏发动机, 全部效果就变得卡顿非常, 惨不忍睹了.
4.通知与事件
每种语言一样有自己的通知处理方式, 不过我很喜欢使用obj-c中的这类NotificationCenter的履行方式, 虽然效力不高, 但是管理很集中, 而且通知间的耦合行最低, 在多模块开发的时候, 这个最方便
在游戏开发中会有冒泡通知的方式, 比较局限, 不过相比nc效力高1些
效力最高的就是耦合性最高的直接对对象和指针的控制, 如果你这么处理太小项目, 还没感到压力, 那末你可以继续使用了(汗), 推荐这类方式在内部, 局部, 本身之间耦合行就比较高的对象之间使用, 效力比较高
5.运动方式
很多时候, 我们能自己通过周期函数处理运动, 比如简单的恒定运动. 但是大部份的效果表现, 还是交给专业的tween运动类来实现吧. 其实这类函数也很简单, 就是我们中学学到的公式
in和out:1般运动函数都会混合in和out, 解释1下, in为拉近运动, 数值上表现就是速度会愈来愈快, 加速为正, out为阔别运动, 数值上表现为速度愈来愈慢, 加速为负, 有些tween还支持inout1起的平滑曲线, 也就是开始慢, 结束也慢, 中间略快, 算是比较平滑的运动解决方案
linear:匀速运动, 最简单的运动方式
sin:正弦运动, 可以选取不同的曲线产生out和in的效果
square:平方根, 其实就是y=x平方曲线, 衍生的还有3次根和4次根, 表现来就是曲线变化更加迅速
elastic: 弹性, 会在终点左右摆动, 最后停在终点
back:回旋, 在去往终点前先往反方向运动, 或再终点接近时是从反向逼近
bounce:弹跳的小球, 类似elastic, 只是不会到终点的另外一边
exponential:指数, 依照指数曲线运动
基本上经常使用的有sineout, backout, backin
6.物理引擎
tween虽然能给你很多帮助, 但是如果需要真实的物体运动曲线, 和碰撞, tween是完全帮不了你的. 就需要神1样存在的物理引擎
就写这么多吧. :P