修正 scaleform 的多點觸控 (隨手一記 給後來的人做個參考)
scaleform 版本號 4.2.24 (估計這就是最後一個 移動版的版本了,萬年沒有更新了)
開始 一直以為 scaleform 沒有做 多點觸控 和 手勢 。其實 都已經封裝好了。只是PC端的模擬器不支援。(除錯 比較蛋疼只能 用真機了)
但是在用的時候發現 TouchEvent.Begin 有問題 只能獲取第一個點選點,和第一個抬起點,move 操作可以正常獲取。
如果不修改 程式碼的話 完全可以用 通過監聽 move 來做操作的 但是 總是感覺 不爽。(這個 每次 點選 都會緊跟一個 move 操作,不知道是 bug , 還是因為螢幕ppi 太高的原因)
問題很好解決 找到 MainActivity.java 檔案的最後 幾行
for (int i = 0; i < p_count; i++) {
int action_id = action%256; //就是這一行 if (Debug.ENABLED && action != 2) { Log.d("GFxPlayer", " PointerIds: " + " " + event.getPointerId(i) + "Action: "+Integer.toString(action)
+ " ID: "+Integer.toString(action_id) ); } NativeOnTouch(event.getPointerId(i), action_id, event.getX(i), event.getY(i)); }
android 在 多點觸控的時候 這個 action 值 是不定的。但是很有規律,(我android一竅不通,不清楚為何這個樣子),在只有一個點選點是 action = 0;
當有兩個點選點是 會變成 261(256 + 5 + 0 ) , 當有3 個點選點時 會變成517 (512 + 5 + 0) 依次類推 。 具體的其他規律 想摸索可以自己 列印出來看看。
知道啥意思的 也請多多指教。其實本應該將 261 轉成 0 , 517 轉成 0 的 , 但是 我發現他在 Platform_Android_GL.cpp 檔案中對 TouchEvents[] 的 5,6,7 同樣設定了 GFx::Event::TouchBegin, GFx::Event::TouchEnd, GFx::Event::TouchMove}; 這樣就不用必須 轉成 0 1 2,轉成 5,6,7 也是可以的。
之後就可以在 AS3 中 通過 如下程式碼來進行 操作了。
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
stage.addEventListener(TouchEvent.TOUCH_BEGIN,onTouchBegin);
尾巴:
最近在搞 scaleform 的 平滑移動 , 毫無頭緒中 , 幾個執行緒完全看暈。有知道怎麼解決求指教啊。
我自己認為 scaleform 出現 移動不平滑的原因是:
1.每次 drawFrame 的時間 不等長 , 導致 指教用 ENTER_FRAME 進行刷幀 ( x + speed ) 不平穩。
delta 這個時間差 無法 在程式中 直接獲取。
2.由於執行緒 間 相互注入 導致 在執行完 Advance 方法後 未必 一定會進行 draw , 導致到 物體移動不規律。