Re: 一方を離す、と、もう一方をタップ、を同時に行った場合 ( No.1 ) |
- 名前:管理人 日時:2020/09/30 22:51
そのような場合は非公開関数の GetTouchInputLogNum と GetTouchInputLogOne を使用して、
タッチが一瞬でも離されたかを検出するという方法があります
// ストックされているタッチ情報の数を取得する
int GetTouchInputLogNum( void ) ;
// ストックされているタッチ情報をクリアする
int ClearTouchInputLog( void ) ;
// ストックされているタッチ情報から一番古い情報をひとつ取得する
// PeekFlag : 取得した情報をストックから削除しないかどうか( TRUE : 削除しない FALSE : 削除する( デフォルト ) )
TOUCHINPUTDATA GetTouchInputLogOne( int PeekFlag = FALSE ) ;
DXライブラリは内部で、タッチした場合、タッチ位置が移動した場合、タッチが離された場合の情報を
ストックしているのですが、この関数はそのストックされている情報を取得する為のものです
GetTouchInputLogOne で戻り値として返ってくる TOUCHINPUTDATA 構造体は以下のようになっています
// タッチパネルのタッチの情報
struct TOUCHINPUTDATA
{
// 情報の時間
LONGLONG Time ;
// 有効なタッチ情報の数
int PointNum ;
// タッチ情報
TOUCHINPUTPOINT Point[ TOUCHINPUTPOINT_MAX ] ;
} ;
Time は構造体の情報が記録された時間です、PointNum はタッチされている数で、こちらが 0 の場合は
画面はタッチされていない、ということを意味しています
因みに Point はタッチ情報の配列で、構造体 TOUCHINPUTPOINT は以下のようになっていて、
こちらは GetTouchInput で取得できる情報そのままです
// タッチパネルの1箇所分のタッチの情報
struct TOUCHINPUTPOINT
{
// タッチされたデバイス
DWORD Device ;
// タッチを判別するためのID
DWORD ID ;
// タッチされた座標X
int PositionX ;
// タッチされた座標Y
int PositionY ;
} ;
これらの関数を使用して毎フレーム GetTouchInputLogNum の戻り値の分だけ
GetTouchInputLogOne を実行して、戻り値の TOUCHINPUTDATA 構造体のメンバー変数 PointNum が
0 の場合があれば、仮に現状では
時間
↓
↓ 画面をタッチ
↓
↓ プログラムが GetTouchInput で ID 0 のタッチを検出
↓
↓ 画面からタッチを離す
↓
↓ 直ぐに再度タッチ
↓
↓ プログラムが GetTouchInput で ID 0 のタッチを検出( タッチが離されたことが検出できない )
↓
このような↑状況でも、GetTouchInputLogNum、GetTouchInputLogOne を使ったタッチ離し検出処理を加えれば
時間
↓
↓ 画面をタッチ
↓
↓ プログラムが GetTouchInput で ID 0 のタッチを検出
↓
↓ 画面からタッチを離す
↓
↓ 直ぐに再度タッチ
↓
↓ GetTouchInputLogNum + GetTouchInputLogOne でタッチが一度離されたことを検出
↓
↓ プログラムが GetTouchInput で ID 0 のタッチを検出( 前回検出した ID 0 のタッチとは別と判別可能 )
↓
と、ID は 0 のままですが、一度タッチが離されたことを判断できるようになります
よろしければお試しください m(_ _)m
|
Re: 一方を離す、と、もう一方をタップ、を同時に行った場合 ( No.2 ) |
- 名前:task(解決) 日時:2020/10/04 21:37
返信が遅れ、大変申し訳有りません。
非公開関数にあったのですね、なるほどです。
試してみます、有難うございました!
|
Re: 一方を離す、と、もう一方をタップ、を同時に行った場合 ( No.3 ) |
- 名前:task 日時:2020/10/05 00:51
ごめんなさい、解決としたのですが、上手く行かなかったのでここで再度質問させてください…
タッチ離し検出処理を加え、実行してみたのですが、どうも上手く行っていないらしく、
どのような値が入っているのかをまず確かめようと考え、
GetTouchInputLogNumをprintfDxで試しに表示してみた所、68427075という値が現れ、(まだ何もタップ入力していない状態で)
おかしいと思い、ClearTouchInputLog()でクリアしてから表示しようとしたところ、68424077という値が現れ、(こちらもタップ入力していない状態で)
更に、強制終了してしまいました。
何度繰り返してもこのような結果となり、どうしてよいものか・・・
ご教授お願いできませんでしょうか?
|
Re: 一方を離す、と、もう一方をタップ、を同時に行った場合 ( No.4 ) |
- 名前:管理人 日時:2020/10/05 22:54
うーん、おかしいですね…
すみません、taskさんの環境は何でしょうか?( Windows, Android, iOS など )
|
Re: 一方を離す、と、もう一方をタップ、を同時に行った場合 ( No.5 ) |
- 名前:task 日時:2020/10/05 23:24
Windowsです。
|
Re: 一方を離す、と、もう一方をタップ、を同時に行った場合 ( No.6 ) |
- 名前:task 日時:2020/10/05 23:38
すみません、GetTouchInputLogNumの()を抜かして記述していたようです…
GetTouchInputLogNum()としたところ、正常に表示されました。
もう一度検出処理を見直してみます。。
|
Re: 一方を離す、と、もう一方をタップ、を同時に行った場合 ( No.7 ) |
- 名前:task(解決) 日時:2020/10/06 18:22
上手く動作させることに成功しました!
本当に有難うございます!
(この度は私の単純な見落としにより、管理人様に無駄にお手数をお掛けしてしまい、大変申し訳有りませんでした。。orz)
|