面對coronasdk的物理引擎

關於移動手機的開發,目前網絡上主要流行兩種開發軟件,一個是眾所周知的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

關於作者

垚垚

發表評論

您的電子郵件地址不會被公開. 必填字段標 *