scaleform mobile sdk for android 多點觸控 修正

JaoYE發表於2014-11-30

修正 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 , 導致到 物體移動不規律。

 

相關文章