public void setTouchAreaBindingOnActionDownEnabled(final boolean pTouchAreaBindingOnActionDownEnabled)
と
public void setTouchAreaBindingOnActionMoveEnabled(final boolean pTouchAreaBindingOnActionMoveEnabled)
というメソッドがあります。
ソースには
Enable or disable the binding of TouchAreas to PointerIDs (fingers).
という説明があります。訳すと
「タッチ領域のポインタID(指)への束縛を有効化、無効化する」 という感じでしょうか。
いまいちよく分からないので調べてみました。
タッチ領域の束縛とは
通常、タッチ領域(SpriteとかRectangleとか)に指を触れ、領域外までドラッグするとその領域のイベントは実行されなくなります。しかし、タッチ領域がポインタIDに束縛されると、指をドラッグしてタッチ領域の外に出ても、指を離すまで、その領域のタッチイベントが実行され続けます。
これがタッチ領域の束縛です。
そして、この束縛が領域のタッチ時に行われるようにするのが
setTouchAreaBindingOnActionDownEnabled(true)
で、束縛が、領域外から指をドラッグして領域内に入った時に行われるようにするのが
setTouchAreaBindingOnActionMoveEnabled(true)
というわけです。
![]() |
タッチ領域の束縛 |
使い所
AndengineExamplesで見てみると- MultiTouchExample
- PinchZoomExample
- TouchDragExample
マルチタッチでは、異なる場所でのタッチを区別するためにタッチ領域の束縛が必要なようです。
また、Spriteとかをドラッグで動かしたい場合、指を素早く動かしても追従できるように束縛を使っているようです。
他には
- ButtonSpriteExample
使い方
タッチ時の束縛を行う場合準備として、setTouchAreaBindingOnActionDownEnabled(true)
をセットします。
その後、onAreaTouched()がTouchEvent.ACTION_DOWNの状態でtrueを返せば束縛が開始されます。
領域内に入った時の束縛を行う場合
準備として、setTouchAreaBindingOnActionMoveEnabled(true)
をセットします。
その後、onAreaTouched()がTouchEvent.ACTION_MOVEの状態でtrueを返せば束縛が開始されます。
束縛の解除
指を離した(TouchEvent.ACTION_UP)状態で束縛が解除されます。
バグ?
上のような説明をしてから言うのもアレですが上手く束縛できない例があります。上手く行く例
- setTouchAreaBindingOnActionDownEnabled(true)
- setTouchAreaBindingOnActionMoveEnabled(true)
- setTouchAreaBindingOnActionDownEnabled(true)
- setTouchAreaBindingOnActionMoveEnabled(false)
上手く行かない例
- setTouchAreaBindingOnActionDownEnabled(false)
- setTouchAreaBindingOnActionMoveEnabled(true)
ソースを見ると、DownもMoveも束縛自体はできているのですが、束縛された領域のイベントを実行する条件が「mTouchAreaBindingOnActionDownEnabledがtrueにセットされていること」になっています。
https://github.com/nicolasgramlich/AndEngine/blob/GLES2-AnchorCenter/src/org/andengine/entity/scene/Scene.java#L312
(2014/11/29時点)
上のリンクの312行目です。
これを
if(this.mTouchAreaBindingOnActionDownEnabled) {
↓
if(this.mTouchAreaBindingOnActionDownEnabled || this.mTouchAreaBindingOnActionMoveEnabled) {
に変更すると上手く行くと思います。未確認。
0 件のコメント:
コメントを投稿