程序開發(fā)的1點(diǎn)小總結(jié), 給要學(xué)習(xí)1門新語(yǔ)言的朋友1些幫助, :P
1.多項(xiàng)條件下的處理
第1種方法: 每一個(gè)需要履行A函數(shù)的條件下都寫1邊A函數(shù)調(diào)用, 這類方式也是最中規(guī)中矩的寫法, 代碼相對(duì)臃腫, 如果A有任何變動(dòng), 就要修改多處, 這類代碼塊寫多了, 容易漏掉
第2種寫法: 在B條件挑選前, 創(chuàng)建1個(gè)臨變量布爾c, 用來(lái)監(jiān)控需要A函數(shù)需要的條件, 需要就為true, 不需要就不寫(默許初始false), 這樣在條件結(jié)束后, 再對(duì)c進(jìn)行判斷, 然落后行1次性處理A函數(shù).
第3種寫法: B條件自己去處理需要的挑選, 然后針對(duì)A再進(jìn)行挑選1次, 不需要臨變量
(以上其實(shí)不討論if和switch的效力, 任何方案依照自己順手的來(lái)就好)
2.延遲函數(shù)
先看條件, 屢次觸發(fā)同1條件, 1般都來(lái)自多個(gè)對(duì)象對(duì)本對(duì)象的響應(yīng)釀成的, 此時(shí)響應(yīng)的次數(shù)多是已知的, 也多是未知的
對(duì)已知數(shù)目的做法: 在B條件下進(jìn)行計(jì)數(shù), 計(jì)數(shù)到達(dá)要求, 再激活A(yù)函數(shù)
不過(guò)1般最好的方案就是延遲A的履行, 由于這類做法, 既不會(huì)頻繁的調(diào)用A, 也不會(huì)致使A響應(yīng)過(guò)慢, 等1系列問(wèn)題, 這類方法, 只需知道連續(xù)的序列激活條件的間隔最大時(shí)間就好, 1般這類響應(yīng)要不就是相差1個(gè)步長(zhǎng), 要不就相差幾10毫秒, 相差1個(gè)步長(zhǎng)很簡(jiǎn)單, 延遲設(shè)置為0便可, 由于延遲函數(shù)本身就是創(chuàng)建后在下1個(gè)步長(zhǎng)履行, 所以, 在比如連續(xù)的for循環(huán)里面直接設(shè)置延遲為0就ok, 固然在for這樣可控的函數(shù), 還是盡可能不要做延遲的寫法 :P
固然, A函數(shù)如果被延遲, 又會(huì)觸及到很多方面的問(wèn)題, 比如:
a.調(diào)試的時(shí)候是完全沒(méi)法追溯的, 如果觸及延遲調(diào)用的地方比較多, 出了問(wèn)題, 很大可能會(huì)致使調(diào)試的艱巨, 體現(xiàn)在斷點(diǎn)向上追溯只追溯到delay方法, 連調(diào)用delay的函數(shù)是甚么都很難肯定, 這也是語(yǔ)言比較弱的地方, 你只能搜索所有調(diào)用delay A函數(shù)的地方, 設(shè)置斷點(diǎn)來(lái)提早追蹤
b.延時(shí)函數(shù)其實(shí)不會(huì)引發(fā)線程級(jí)的問(wèn)題, 畢竟還是同1個(gè)線程, 但是還是要謹(jǐn)慎, 在delay以后可能存在萬(wàn)種可能, 乃至函數(shù)本身都不存在都有可能, 它存在很多不肯定性, 如果需要處理1些參數(shù), 最好還是和delay函數(shù)1起托家?guī)Э诒甲甙?/span>
delay函數(shù)相當(dāng)?shù)膶?shí)用, 我在這里其實(shí)不講具體delay怎樣實(shí)現(xiàn), 代碼如何, 每種語(yǔ)言都有自己的延時(shí)函數(shù), 大家自己去揣摩吧
3.周期履行函數(shù)
我覺(jué)得在接觸1個(gè)語(yǔ)言, 第1要熟習(xí)它的寫法如何打log, 第2就要知道周期履行函數(shù)這類有趣的設(shè)定, 它能實(shí)現(xiàn)很多很成心思的事情, 可讓參數(shù)動(dòng)起來(lái), 可讓圖形動(dòng)起來(lái), 可讓程序動(dòng)起來(lái), 總之就像程序的發(fā)動(dòng)機(jī)1樣
周期履行函數(shù), 有固定周期和可調(diào)周期兩種, 唯1區(qū)分是, 如果你使用了周期過(guò)于頻繁的沉重處理, 可能會(huì)累壞發(fā)動(dòng)機(jī), 全部效果就變得卡頓非常, 慘不忍睹了.
4.通知與事件
每種語(yǔ)言一樣有自己的通知處理方式, 不過(guò)我很喜歡使用obj-c中的這類NotificationCenter的履行方式, 雖然效力不高, 但是管理很集中, 而且通知間的耦合行最低, 在多模塊開發(fā)的時(shí)候, 這個(gè)最方便
在游戲開發(fā)中會(huì)有冒泡通知的方式, 比較局限, 不過(guò)相比nc效力高1些
效力最高的就是耦合性最高的直接對(duì)對(duì)象和指針的控制, 如果你這么處理太小項(xiàng)目, 還沒(méi)感到壓力, 那末你可以繼續(xù)使用了(汗), 推薦這類方式在內(nèi)部, 局部, 本身之間耦合行就比較高的對(duì)象之間使用, 效力比較高
5.運(yùn)動(dòng)方式
很多時(shí)候, 我們能自己通過(guò)周期函數(shù)處理運(yùn)動(dòng), 比如簡(jiǎn)單的恒定運(yùn)動(dòng). 但是大部份的效果表現(xiàn), 還是交給專業(yè)的tween運(yùn)動(dòng)類來(lái)實(shí)現(xiàn)吧. 其實(shí)這類函數(shù)也很簡(jiǎn)單, 就是我們中學(xué)學(xué)到的公式
in和out:1般運(yùn)動(dòng)函數(shù)都會(huì)混合in和out, 解釋1下, in為拉近運(yùn)動(dòng), 數(shù)值上表現(xiàn)就是速度會(huì)愈來(lái)愈快, 加速為正, out為闊別運(yùn)動(dòng), 數(shù)值上表現(xiàn)為速度愈來(lái)愈慢, 加速為負(fù), 有些tween還支持inout1起的平滑曲線, 也就是開始慢, 結(jié)束也慢, 中間略快, 算是比較平滑的運(yùn)動(dòng)解決方案
linear:勻速運(yùn)動(dòng), 最簡(jiǎn)單的運(yùn)動(dòng)方式
sin:正弦運(yùn)動(dòng), 可以選取不同的曲線產(chǎn)生out和in的效果
square:平方根, 其實(shí)就是y=x平方曲線, 衍生的還有3次根和4次根, 表現(xiàn)來(lái)就是曲線變化更加迅速
elastic: 彈性, 會(huì)在終點(diǎn)左右擺動(dòng), 最后停在終點(diǎn)
back:回旋, 在去往終點(diǎn)前先往反方向運(yùn)動(dòng), 或再終點(diǎn)接近時(shí)是從反向逼近
bounce:彈跳的小球, 類似elastic, 只是不會(huì)到終點(diǎn)的另外一邊
exponential:指數(shù), 依照指數(shù)曲線運(yùn)動(dòng)
基本上經(jīng)常使用的有sineout, backout, backin
6.物理引擎
tween雖然能給你很多幫助, 但是如果需要真實(shí)的物體運(yùn)動(dòng)曲線, 和碰撞, tween是完全幫不了你的. 就需要神1樣存在的物理引擎
就寫這么多吧. :P