本文由雲+社群發表在src目錄下建立乙個新目錄role,用來存放遊戲中角色。 在role裡建立乙個傘兵soldier.ts物件檔案。
module role
init():void}}
修改gamepage.ts,把傘兵加入到遊戲主畫面中去,重點看rendersoldier()
module view
init():void
rendersoldier():void}}
執行起來看下,發現遊戲主畫面上,已經多了乙個傘兵(請忽略我的很爛的摳圖,手動捂臉^_~ )
相比起來,requestanimationframe 效能更高,更適合做動畫。但是在遊戲裡會有很多地方都用到定時器,如何管理那麼多定時器,是非常讓人頭疼的事情。所以laya也提供了自己的定時器的相關實現:laya.timer
來簡化定時器的使用,這個定時器同樣是基於幀率的,我們來看看這個怎麼用。
修改gamepage如下,重點看laya.timer.frameloop
module view
init():void
rendersoldier():void
onloop():void}}
來看下效果,看起來還不錯
下一步,就改是大炮打傘兵了,當然首先得給大炮建立乙個炮彈。 ball.ts
module role
init():void}}
在gamepage上新增炮彈
renderball():void
嗯,炮彈新增成功,不過,貌似有點問題,怎麼炮彈顯示層級在大炮上面了?似乎有點難看?
還記得前端世界裡神奇的z-index嗎? laya也有,叫zorder。調整zorder的數值,可以調節sprite的層次(脫了馬甲,我一樣認識你,_) 把渲染炮彈部分改一下層級:
renderball():void
這次炮彈躲在大炮後面去了,一會兒再讓他出來吧!
炮彈向上飛,就和傘兵向下掉一樣,在幀迴圈裡不斷修改y值就可以。但是這次,我們要響應事件了,必須點選大炮,觸發點選事件後,才發射炮彈。
再次修改gamepage.ts,這次的重點是多了this.pao.on(laya.event.mouse_down,this,this.onmousedown);
這個事件監聽
module view
init():void
rendersoldier():void
renderball():void
onmousedown():void
onloop():void}}
}
在執行一下看看:
到目前為止,還進行得不錯,就差擊落傘兵了,可憐的傘兵,你的死期就要到了,還差乙個碰撞了。
碰撞演算法常見的有以下這些:
圓形碰撞:和矩形類似,比如炮彈就是圓的,用圓形檢測,更適合真實情況。
多矩形碰撞:如果影象相對比較複雜,可以拆分為多個矩形,在準確性和效能方面取得平衡。
畫素檢測碰撞:如果需要非常精確的碰撞,就要使用畫素檢測了,這個效能相對就比較低了。
在laya裡,對於矩形碰撞檢測,提供了rectangle.intersection()
方法,可以非常方便的進行矩形檢測。
繼續修改gamepage.ts
gameover():void
onloop():void}}
再來看下效果:
boom,傘兵成功被大炮打中,「絕地求死」完美收工!
laya已經內建了效能監測工具,只要初始化後執行laya.stat.show();
就可以開啟
上面清楚的顯示了目前的fps、sprite的數量、drawcall 、記憶體消耗等,我們優化的目標就是把這些值降低下來。
具體的優化手段有很多,大家可以在具體的業務開發中不斷的總結提煉。
點選
當然可以,用laya.browser.onweixin
就可以判斷了,比如:
if (laya.browser.onweixin)
laya 微信小遊戲 分享 功能
此功能的要點同,如何取得wx,if laya.browser.onminigame this.wx laya.browser.window.wx 然後通過wx.createcanvas 建立乙個離屏canvas.然後通過canvas.getcontext 2d 取得context,再通過contex...
微信小遊戲Laya引擎聲音Bug的解決方案
於是在你面前有2條路,一條是研究引擎 看能否找出bug隱藏在什麼地方,這條路往往比較艱難。第二條是使用egret白鷺引擎的聲音 來代替 laya聲音api,繞開這個問題。作為egret引擎資深開發者的我來說,毫不猶豫的選擇了第二條路。也許你會說,自己是laya引擎的鐵桿,egret也不熟,怎麼辦?沒...
Laya微信小遊戲本地快取
測試版本2.1.1.1 檢視bin libs laya.wxmini.js。發現只會快取png,jpg。聲音和atlas,json不會快取。對比白鷺,白鷺是將png,jpg,atlas,json都進行了快取。且可以設定哪些需要快取,哪些不需要。這一點方便多了。miniadpter.init初始化時,...