01
將新手引導框架開源之後,陸續收到不少夥伴們的反饋,其中有一個問題是“引導腳本的自動執行,只能在瀏覽器上運行,感覺有些雞肋”。
從最開始 Shawn 也一直在思考如何實現在原生環境上的屏幕點擊模擬,之前的思路是分別在 iOS\Android 上分別實現一套原生的 JSB 接口,調用系統的能力來模擬真實的屏幕觸摸,不過要讓大家使用起來需要折騰 JSB\c++,相當於SDK接入,太過於複雜。
在與脫貧實驗中的夥伴們幾次交流討論,大家給出了不同的方案,其中有「黝黑蝸牛」的方案給了我很大的啓發,下面是解決原生上實現自動節點點擊的討論過程。
「黝黑蝸牛」提出新的思路,使用cc.Button組件發送點擊事件來模擬。
但是非按鈕節點怎麼辦呢?動態創建用完再刪除...還有更好的方法嗎?
調試 Cocos Creator 的源碼,找到事件派發的根源上,需要一個event事件對象。
再向上追蹤源碼,定位到handleTouchesEnd函數,touches參數是點擊的座標,比較好創建。
調用引擎接口handleTouchesBegin\handleTouchesEnd在Mac模擬器上自動執行成功!
微信小遊戲環境也成功了!
下面是模擬點擊的核心代碼:
function touchSimulation(x, y) {
//獲取屏幕矩形大小
let rect;
let inputManager = _cc.inputManager;
if (cc.sys.isBrowser) {
let canvas = document.getElementById("GameCanvas");
rect = inputManager.getHTMLElementPosition(canvas);
} else {
rect = cc.view.getFrameSize();
rect.left = 0;
rect.top = 0;
}
//將x,y從Creator世界座標轉換到設備窗口座標
let vp = cc.view.getViewportRect();
let sx = cc.view.getScaleX();
let sy = cc.view.getScaleY();
let ratio = cc.view.getDevicePixelRatio();
let htmlx = (x * sx + vp.x) / ratio + rect.left;
let htmly = rect.top + rect.height - (y * sy + vp.y) / ratio;
let pt = cc.v2(htmlx, htmly);
//模擬點擊操作
cc.log(`模擬點擊座標:${pt.x}, ${pt.y}`);
let touch = inputManager.getTouchByXY(pt.x, pt.y, rect);
inputManager.handleTouchesBegin([touch]);
setTimeout(() => {
inputManager.handleTouchesEnd([touch]);
}, 200);
}
折騰這麼多,新手引導自動執行到底有什麼價值呢?
看過Shawn的GitChat文章想必你知道,新手引導自動執行可以實現自動化測試,引導腳本就是自動化測試腳本。
Shawn早在Cocos2d-js時使用過Cocos官方開發的Cocos2d-js devtool工具,看下圖:
它是直接將一段 JS 代碼嵌入已經運行的 Cocos2d-js 遊戲中,如果將新手引導的自動執行能力動態嵌入一個 CocosCreator H5 遊戲那將會是什麼呢?—— 外掛!
新手引導框架本身不依賴於具體遊戲的代碼邏輯,重點只關心場景樹結構、關鍵節點名字,要實現一個外掛的可行性非常高。
一講到外掛估計大家都覺得有點黑暗,那我們換一個正面的思路,實現一個“內掛”,就是在遊戲內部的掛機自動執行。
想信大多數人都見過很多無腦的,自動打怪、自動做任務的傳奇類掛機遊戲... 使用引導自動執行的能力 + 操作錄像功能,將會極大的降低掛機類遊戲的研發成本,爲開發人員節省時間!
03
新手引導框架正式遷移到GitHub地址:
https://github.com/ShawnZhang2015/GodGuide
「Creator星球遊戲開發社區」從最早的「奎特爾星球」改名來,Shawn的願景一直都沒有改變:“幫助初學者快速入門,助力企業降低研發成本,讓遊戲成爲教育的最強武器!”
小遊戲、大能量,願我們在前進的道路上砥礪前行,共同成長!歡迎夥伴們加我微信:z6346289。
Creator星球遊戲開發社區
長按二維碼,關注我們!