自制小球淘汰賽教程(一)物體的屬性
我制作了一個50球標準末位淘汰賽模板,后面的教程都在這基礎上講解。
模板下載地址:
鏈接:https://pan.baidu.com/s/1lLy5baKifP2rUXCg7nY4bg?pwd=qj0s 提取碼:qj0s
不一定要完全按照教程來,你可以自己創(chuàng)新。
提前打個預防針,本教程適用于沒有代碼基礎的新手,盡量不使用專業(yè)術語。
杠精勿入,因為以前遇到過在無關緊要的地方抬杠的奇葩人士,有強迫癥的大佬請繞道,別來萌新這里糾正“這個說法不專業(yè)”“這個明明叫做xxx”。
。
。
一、準備工作
到algodoo官方網(wǎng)站,www.algodoo.com下載并安裝algodoo軟件。
然后,先看官方新手教程,至少把軟件基本操作搞明白。
怎么畫圓形,怎么刪除,怎么移動,工具欄每個工具是干什么的,這些基礎操作我不教,自己看官方自帶教程,很簡單的。如果這些都搞不清楚,那你估計不適合做球賽。
很多選項看字面意思就行了,不做解釋,比如“刪除”“繪畫旋轉(zhuǎn)標記”。

二、物體屬性
選中一個物體,并點擊右鍵,就可以修改這個物體的各種屬性了。
按住ctrl鍵再點擊鼠標左鍵,可以同時選擇多個物體。
選中物體后,再滑動鼠標滾輪,能把這個物體的圖層(z軸)移到最上方或最下方。
在空白的地方點右鍵可以改背景顏色。

【液化所選物件】變成液體,不建議使用。
【spongify】變成果凍狀軟體,實際上是很多個用軸承連接起來的幾何體,不建議使用。
【選取】同時選中多個物體后,可以點“設為同一群組(編組)”,這樣以后只要點其中一個物體,就能選中這一組的物體。
選取列表中有個“物件跟隨”,打勾后,視角會自動跟著這個物體移動,可用來做關卡切換。一個場景只能有一個物件跟隨。
【外觀】
H(色相),決定這個顏色屬于哪個色系,范圍是0~360。
個人設定:0°紅色,30°橙色,60°黃色,90°黃綠,120°酸橙,150°翡翠,180°青色,210°天藍,240°藍色,270°紫色,300°品紅,330°玫瑰。
?

S(彩度),數(shù)值越低這個顏色越淺。
比如,把藍色的S值改成50%,就變成了長春花。
?

V(明度),數(shù)值越低這個顏色越暗。
比如,把藍色的V值改成50%,就變成了海軍藍。
?

羽化邊緣,下圖是圓形羽化之后的效果,我用來當做傳送點。羽化邊緣只改變外觀,不影響其他屬性。
?

紋理就是貼圖,點“尋找紋理”就能給這個物體添加貼圖了。
【文本】
方形才有這個選項,可以輸入文本。
【材質(zhì)】

密度:一般情況下,使用默認的2就行。修改密度后,質(zhì)量會自動更新。
摩擦力:障礙物的摩擦力一般也不用改。小球的摩擦力設置為0,可以大幅降低(穿墻/原地擺爛/扎堆卡在狹窄的地方)等發(fā)生的概率。如果你就想要小球穿墻,摩擦力就用默認的0.5。
彈性:小球彈性一般是0.5。障礙物的彈性自己根據(jù)關卡設置來調(diào)整就行。彈性建議別弄得太大,否則小球速度太快非常容易穿墻。
引力:一般不用;需要引力的關卡,自己看情況設置數(shù)值。引力可以是負數(shù),負引力相當于排斥力。
殺手和設為不滅:如果一個物體被設為了殺手,那么其他物體只要碰到了殺手,就會立刻消失;擁有不滅屬性的物體則免疫殺手。殺手請謹慎設定。
【碰撞作用層】
總共十個碰撞作用層。
如果兩個物體有至少一個相同的碰撞作用層,那么這兩個物體相遇時就會發(fā)生碰撞作用,否則就互相當對方不存在。
比如,物體甲的碰撞層是AB,物體乙AC,物體丙CD;甲乙有共同碰撞層A,相遇時就會碰撞;甲丙沒有共同碰撞層,相遇時就會無視對方。
可與液體碰撞就是字面意思(不建議在algodoo中加入液體,特別卡)。
無自身碰撞:如果兩個物體的碰撞層完全相同,并且都勾選了無自身碰撞,那這兩個物體相遇時就不會發(fā)生碰撞作用。
【幾何行為】
黏附到背景:粘在背景上不動。
松開:取消黏附。
彼此黏附:同時選中多個物體時,讓這些物體黏附在一起。
添加循跡追蹤器:就是小球的尾跡。
其他的選項也都是字面意思。
【快捷控制鍵】
點對應的位置就能設置快捷鍵,在需要按鍵操作時可設置。
三、script腳本選單
右鍵一個物體,點擊最下方的script腳本選單就能進入了。

左上角的黑色空文本框是物體控制臺,以后會經(jīng)常用到,這里先跳過。
這個界面看著很復雜,其實只要知道這些英文單詞是什么意思,就很簡單了。
有很多屬性跟前面右鍵菜單是一樣的,兩邊數(shù)值會同步變化,在右鍵修改和腳本選單修改都行。
注意,修改數(shù)值時,如果搞不清楚,一定要保持原本的格式。比如[0,0]只能改成其他二項數(shù)組,不能改成單個數(shù)字或true。
常見的類型:
數(shù)值:包括整數(shù)和小數(shù)(浮點數(shù)),一般沒啥區(qū)別,需要區(qū)別時再做說明。數(shù)值可以寫∞。
字符串:就是文字,需要加上“”。
布爾變量:就是yes或no,只能在“true”和“false”之間更改。
數(shù)組:用方括號[ ?]表示。
(e)=>{ ] 寫代碼的地方,后面再詳細說明。
【collideSet】跟碰撞作用層選項同步更新,范圍是0~1023。每個整數(shù)對應一種碰撞層組合,0表示全部層都沒勾選,1023則是ABCDEFGHIJ全部勾選。
【color】用RGB表示的物體顏色,前三個數(shù)值是RGB,第四個是透明度,范圍都是0~1。
【colorHSVA】用HSVA表示的物體顏色,跟外觀選項的H(色相)S(彩度)V(明度)A(透明度)是一樣的。H范圍0~360,另外三個范圍0~1
以上兩種顏色表示方法選擇其中一種就行,個人習慣用HSVA。
你可能會看到0.199999999,56.000000027等數(shù)值,這個是計算機誤差造成的,其實就是0.2和56。
【materialname】物體名字。雙引號必須要留著!空的雙引號表示沒有名字。
比如,你想給一個球取名cyan,請在這一欄輸入“cyan”。(當然algodoo無法直接輸入中文,請從其他地方復制粘貼過來。)
【各種寫了(e)=>{}的東西】寫代碼用的,后面再詳細解釋。
【pos】位置坐標。直接改pos數(shù)值與直接鼠標移動物體效果是一樣的。
【radius】半徑。圓形才有這個屬性。
【size】長和寬。方形才有這個屬性。
【timetolive】存活倒計時。默認是∞,即永遠存活;設置為任意正數(shù),開始模擬之后就倒計時,歸零之后這個物體就消失。
【vel】瞬時速度。會動態(tài)更新。第一個數(shù)是x軸方向的速度,第二個數(shù)是y軸方向的速度,正數(shù)是右和上,負數(shù)是左和下。
?
其他屬性(我從來沒用過的屬性就不做介紹了):
【adhension】粘附力,默認是0。用得比較少,如果想整花活,可以改粘附力。
設置為正數(shù),可以讓這個物體具有“膠水”特性。兩個物體碰撞時,它們的粘附力之和越大,就越容易粘在一起。
粘附力可以是負數(shù),負粘附力的情況下,只要兩個物體碰到,就會立刻離開對方。
【airFrictionMult】空氣摩擦力系數(shù),默認是1。用得比較少。
【angle】物體的角度,用弧度制表示,范圍是-π到π。改angle數(shù)值與用工具欄的旋轉(zhuǎn)工具效果是一樣的,只不過直接改angle數(shù)值更精確。
【angvel】角速度。靜止的物體角速度為0,正數(shù)表示逆時針旋轉(zhuǎn),負數(shù)表示順時針旋轉(zhuǎn)。
【area】面積。不能直接修改數(shù)值。通過縮放工具等使物體面積變化后,area數(shù)值自動更新。
【attraction】引力。跟材質(zhì)界面的引力是一樣的。
【attractionType】引力類型。1是線性,2是平方。
【body】表示粘附關系,無法直接改數(shù)值。Body=0表示粘附到背景,兩個body相同的物體就是彼此粘附的。
(這個屬性是bug制造機,因為無法自己修改body的數(shù)值,在經(jīng)常使用生成物體代碼時,很容易導致兩個不相干的物體莫名其妙Body相同,就粘在了一起。)
【collidewater】是否與液體碰撞。
【density】密度。如果把密度設置為∞,這個物體就會待在原地一動不動,其他東西撞也撞不動,達成跟“粘附到背景”一樣的效果。
(如果你要在一個物體上寫大量代碼,建議不要粘附到背景,用密度 = ∞能達成一樣的效果,運行會流暢很多。)
【drawBorder】是否繪畫物體邊框。
【drawCake】是否繪畫旋轉(zhuǎn)標記。
【edgeBlur】羽化邊緣的數(shù)值。
【friction】摩擦力
【geomID】幾何ID,不可以修改。每個幾何體的geomID都是不重復的,可用geomID來追蹤特定物體。不過比較坑的地方是,geomID無法自己修改,而且geomID還會動態(tài)變化,場上物體消失/產(chǎn)生新物體都可能導致geomID變化。
【entityID】實體ID,跟geomID作用一樣,只不過所有東西(包括幾何體、激光、軸承、尾跡等)都有entityID,而geomID只有幾何體才有。
【heteroCollide】是否無自身碰撞。true表示“無自身碰撞”,false表示“有自身碰撞”即碰撞作用層選項那里不勾選無自身碰撞。
【immortal】是否不滅。如果是true,就不會被殺手殺掉。
【inertiaMultiplier】慣性常數(shù),默認是1。數(shù)值越大,慣性越大。
【killer】是不是殺手。如果是true,只要碰到的東西沒有不滅屬性,就會讓對方消失。
【opaqueBorders】透明狀態(tài)下是否顯示邊框。
【restitution】彈性。
【text】方形專有屬性,矩形文本框。雙引號內(nèi)的文字會顯示在矩形上。
【textColor】文字顏色,格式為RGBA。
【textConstrained】文字是否限制在矩形框內(nèi)。如果是true,文字會自動調(diào)整大小,使得所有字都在矩形內(nèi);如果是false,文字即便超出矩形框,也不會自動改變大小。
【textFont】字體。
【textFontSize】字體解析度,數(shù)值越大越清晰。建議別設置得太大,別超過128,否則特別卡。
【textScale】文字大小。
【texture】貼圖文件位置。
【textureMatrix】調(diào)整貼圖縮放大小。
【zDepth】z軸深度,數(shù)值大的物體圖層在上方。建議別直接改zDepth數(shù)值,要改圖層請使用鼠標左鍵選中+鼠標滾輪。
四、軸承
如果要給一個物體添加軸承,首先請讓它松開,別粘附在背景,也別跟遠方的其他東西彼此粘附。
軸承必須依附于實體,如果軸承中心沒有物體,那軸承就會消失。
你可以用工具欄的軸承按鈕,手動在任意位置添加軸承;也可以右鍵物體——幾何形為——在中心添加軸承。

軸承起到部分固定作用,把物體在軸承中心的那個點與背景/同位置的其他物體連接。
【馬達】如果不勾選,那物體就不會自轉(zhuǎn),受重力/碰撞等影響才會轉(zhuǎn)動。
如果勾選,那物體就會勻速自轉(zhuǎn)。
對應腳本選單的motor。
【自動剎閘】我沒用過,感興趣的可以自己測試。對應腳本選單的autoBrake。
【反轉(zhuǎn)】默認是順時針旋轉(zhuǎn),勾選“反轉(zhuǎn)”就變成逆時針。
對應腳本選單的ccw。
【馬達速度】自轉(zhuǎn)速度,數(shù)值越大轉(zhuǎn)速越快;負數(shù)表示反方向轉(zhuǎn)動,
對應腳本選單的motorSpeed
【馬達力矩】數(shù)值越大,才能支撐更高的馬達速度。如果想使物體自轉(zhuǎn)不受外界影響,請把馬達力矩設置成∞或很大的數(shù)值。
如果馬達力矩較小,會出現(xiàn)以下效果:這個物體太重了,馬達力矩太小了,實在帶不動,轉(zhuǎn)不起來;物體自轉(zhuǎn)時撞到很重的東西或固定的墻壁,然后就卡住不轉(zhuǎn)了。
對應腳本選單的motorTorque
【軸承破壞沖力上限】默認是∞。如果不是∞,那轉(zhuǎn)速過快時軸承就會壞掉,然后物體就飛走了。
對應腳本選單的impulseLimit。
軸承腳本選單的其他屬性:
【distanceLimit】軸承偏離軸心點距離限制。如果不是∞,偏離距離超過時,軸承就會壞掉。
勻速轉(zhuǎn)動的物體通用模板:畫一個普通的不粘附到背景的物體,在想自轉(zhuǎn)的中心位置點一個軸承,馬達打勾,設置轉(zhuǎn)速,力矩輸入9999999(隨便輸個大數(shù)字),想逆時針旋轉(zhuǎn)就勾選反轉(zhuǎn)。
如果想實現(xiàn)類似地球繞太陽公轉(zhuǎn)的效果,可以這樣做:
首先用上面的方法做一個自轉(zhuǎn)的圓形,然后在旁邊畫你想要公轉(zhuǎn)的物體,選中這兩個物體并彼此粘附,大功告成!
。
。
第一章先講到這里,了解以上物體屬性后,你可以嘗試畫一些擁有不同屬性的靜止障礙物,還有勻速轉(zhuǎn)動的障礙物。
比如把障礙物彈性設置成0,速度多快的球碰到之后都會瞬間“冷靜”下來;
給終點設置輕微的引力,使得路過的球會被傾向于奔向終點。
然后利用我分享的模板,你就可以嘗試做一些簡單的關卡了。
發(fā)揮想象力,做出新奇的關卡吧。
不要光看教程文字,多多動手嘗試,才能知道實際效果。
第二章準備講各種有(e)= > { }的代碼,還有常用的math函數(shù)(主要是三角函數(shù))。