WP8 ですべての状態 (押された、離された、移動された) のタッチ ボタンを作成しようとしていますが、機能しTouchLocationState.Released
ません。
これが私のコードです:
クラス変数:
bool touching = false;
int touchID;
Button tempButton;
Button は、タッチ時に状態を切り替えるメソッドを持つ別のクラスです。
Update メソッドには、次のコードが含まれています。
TouchCollection touchCollection = TouchPanel.GetState();
if (!touching && touchCollection.Count > 0)
{
touching = true;
foreach (TouchLocation location in touchCollection)
{
for (int i = 0; i < menuButtons.Count; i++)
{
touchID = location.Id; // store the ID of current touch
Point touchLocation = new Point((int)location.Position.X, (int)location.Position.Y); // create a point
Button button = menuButtons[i];
if (GetMenuEntryHitBounds(button).Contains(touchLocation)) // a method which returns a rectangle.
{
button.SwitchState(true); // change the button state
tempButton = button; // store the pressed button for accessing later
}
}
}
}
else if (touchCollection.Count == 0) // clears the state of all buttons if no touch is detected
{
touching = false;
for (int i = 0; i < menuButtons.Count; i++)
{
Button button = menuButtons[i];
button.SwitchState(false);
}
}
menuButtons は、メニュー上のボタンのリストです。
touched 変数が true になった後の別のループ (Update メソッド内)
if (touching)
{
TouchLocation location;
TouchLocation prevLocation;
if (touchCollection.FindById(touchID, out location))
{
if (location.TryGetPreviousLocation(out prevLocation))
{
Point point = new Point((int)location.Position.X, (int)location.Position.Y);
if (prevLocation.State == TouchLocationState.Pressed && location.State == TouchLocationState.Released)
{
if (GetMenuEntryHitBounds(tempButton).Contains(point))
// Execute the button action. I removed the excess
}
}
}
}
ボタンの状態を切り替えるコードは正常に機能していますが、アクションをトリガーしたいコードは機能していません。
location.State == TouchLocationState.Released
ほとんどの場合、偽になります。(タッチを離した後でも、 の値を持っていますTouchLocationState.Moved
) そして、それが時々機能することがさらにイライラします!
私は本当に混乱していて、何日も立ち往生しています。これは正しい方法ですか?はいの場合、どこで間違っていますか? または、これを行うための他のより効果的な方法はありますか?