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