關於移動手機的開發,目前網絡上主要流行兩種開發軟件,一個是眾所周知的unity(畢竟當年4399小遊戲上面的網絡版Minecraft由它開發,3d引擎沒有任何軟件能夠超越它),另一個是比較小眾化的cocos。cocos佔據著2d遊戲的主要位置,而unity卻佔據著3d遊戲的主要位置。而我們講的coronasdk與cocos一樣為2d遊戲引擎(coronasdk不被人所知主要是因為2010年以前收費,現在連unity都不收費它還收費,把許多開發者嚇跑了。所以不如cocos知名度高),而cocos目前官方推薦的語言為js,我讀過最好的一本關於java的書叫做《學習java從入門到放棄》,而coronasdk則是採用解釋語言lua(其實以前cocos支持lua,但是那家公司把lua項目組給割了,非常非常遺憾)。所以,corona就好寫的多了。
任何遊戲都會有物理引擎,它比動畫寫出來效果要好。它能夠主要控制一下屬性:密度,摩擦係數,彈跳係數,是否受重力的影響等等。它的主要命令為:
local physics = require “physics” —引入物理引擎
physics.start() —啟動物理引擎
physics.stop() —關閉物理引擎
physics.addBody() —添加物理對象
好了,我們現在看下面著一個bug
這是一個正常的情況,箱子自由落下,一切正常
看到“iang”下面的部分,一個神秘的物體在箱子底下,關鍵是還引擎(當時我一個人晚上打代碼,以為鬧鬼了,嚇死我了)。
這是開始界面,不斷有小箱子從天而降,間隔是300毫秒降一個,之後測試發現,只要快速點擊點擊屏幕就可以避免這個bug。再次測試的時候發現小箱子降落的越多,大箱子就會被墊的越高。反過來說,就是這個小箱子到的鬼。
那麼現在就有兩條路可以走了,一個是在轉換頁面的時候把所有產生的小箱子全部刪除,第二個是讓小小箱子全部刪除(感覺在說一種東西)。那麼縷清思路就好辦了。
主要代碼如下
主要功能=()
TIME1 = timer.performWithDelay(300,addcrate,0)
結束
addcrate =函數()
math.randomseed(os.time())
當地種子=的Math.random(1,5)
選擇= math.ceil(種子)
如果選擇== 1 然後
板條箱= display.newImageRect(“crate1.png”,30,30)
crate.x = 120
crate.y = 5
crate.rotation = 15
physics.addBody(箱,{密度= 1,摩擦= 0.3,彈跳= 0})
ELSEIF選擇== 2 然後
板條箱= display.newImageRect(“crate1.png”,30,30)
crate.x = 150
crate.y = 5
crate.rotation = 15
physics.addBody(箱,{密度= 1,摩擦= 0.3,彈跳= 0})
ELSEIF選擇== 3 然後
板條箱= display.newImageRect(“crate1.png”,30,30)
crate.x = 180
crate.y = 5
crate.rotation = 15
physics.addBody(箱,{密度= 1,摩擦= 0.3,彈跳= 0})
ELSEIF選擇== 4 然後
板條箱= display.newImageRect(“crate1.png”,30,30)
crate.x = 210
crate.y = 5
crate.rotation = 15
physics.addBody(箱,{密度= 1,摩擦= 0.3,彈跳= 0})
ELSEIF選擇== 5 然後
板條箱= display.newImageRect(“crate1.png”,30,30)
crate.x = 240
crate.y = 5
crate.rotation = 15
physics.addBody(箱,{密度= 1,摩擦= 0.3,彈跳= 0})
結束
A = A + 1
結束
timer.performWithDelay(10,removeCrate,一)
之後corona就會報錯
“箱”是一個零值
沒辦法,另尋出路。重新想一遍我們剛剛乾了什麼:啟動了物理引擎,添加物理對象。所有的都帶有物理兩個字,意思說我們可以通過物理引擎來實現這一堆東西的消失。這樣一切都好弄了。
功能場景:exitScene()
–要做什麼事寫在這邊
audio.stop()
audio.dispose(背景音樂)
backgroundMusic =零
background:removeSelf()
背景=零
crate1:removeSelf()
physics.stop()
當地結果= timer.pause(時間1)
結束
把下面的大箱子移走,再關閉物理引擎,小箱子就會迅速掉落出去。(正常的話小箱子的y坐標會無限的低,但是corona的垃圾回收裝置會把它們回收,這就是為什麼你產生再多的箱子動畫也不會卡頓)
本文由 落格博客 原創撰寫:落格博客 » 面對coronasdk的物理引擎
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/2846.html