我正在构建一个游戏,您可以按顺序从一个块拖动到另一个块。

我需要做的是:当它们悬停在一个块上时,它将块号添加到数组中,因此我知道按哪个顺序触摸了块。它需要从一个块拖动到另一个块,而不是单击(类似于android锁屏应用)。

到目前为止,我在做什么:使用每个块的坐标和尺寸为每个块创建一个矩形,然后检查用户的触摸是否在该矩形内,然后将该块号添加到数组中。

它似乎有效,但仅适用于按钮1、2和3(仅将1、2和3添加到数组中),但是如果我log触摸logcat和按钮尺寸/坐标,它正在捡东西,所以我不知道为什么它不保存信息?

这是代码:

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
    // TODO Auto-generated method stub
    try {
        Thread.sleep(50);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    x = (int) arg1.getX();
    y = (int) arg1.getY();

    if(b1R.contains(x,y)){
        arr.add("1");
    } else if(b2R.contains(x,y)){
        arr.add("2");
    } else if(b3R.contains(x,y)){
        arr.add("3");
    } else if(b4R.contains(x,y)){
        arr.add("4");
    } else if(b5R.contains(x,y)){
        arr.add("5");
    } else if(b6R.contains(x,y)){
        arr.add("6");
    } else if(b7R.contains(x,y)){
        arr.add("7");
    } else if(b8R.contains(x,y)){
        arr.add("8");
    } else if(b9R.contains(x,y)){
        arr.add("9");
    }

    if(arr.toString() != null){
        Log.d("log", arr.toString());
        Log.d("x", ""+x);
        Log.d("y", ""+y);
    }
    return false;
}

@Override
public void onWindowFocusChanged (boolean hasFocus){
    super.onWindowFocusChanged(hasFocus);
    if(hasFocus){
        b1R = new Rect(b1.getLeft(), b1.getTop(), b1.getRight(), b1.getBottom());
        b2R = new Rect(b2.getLeft(), b2.getTop(), b2.getRight(), b2.getBottom());
        b3R = new Rect(b3.getLeft(), b3.getTop(), b3.getRight(), b3.getBottom());
        b4R = new Rect(b4.getLeft(), b4.getTop(), b4.getRight(), b4.getBottom());
        b5R = new Rect(b5.getLeft(), b5.getTop(), b5.getRight(), b5.getBottom());
        b6R = new Rect(b6.getLeft(), b6.getTop(), b6.getRight(), b6.getBottom());
        b7R = new Rect(b7.getLeft(), b7.getTop(), b7.getRight(), b7.getBottom());
        b8R = new Rect(b8.getLeft(), b8.getTop(), b8.getRight(), b8.getBottom());
        b9R = new Rect(b9.getLeft(), b9.getTop(), b9.getRight(), b9.getBottom());
    }
}


这是要打印到logcat的内容:

[1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,3,3,3]


没有其他按钮?

请帮忙!

提前致谢!

最佳答案

什么是B1r?您是否应该在某个时候进行更新以说明一组新位置?您正在使用Else If语句,这意味着只要

if(b1R.contains(x,y)){


评估为true,其他任何检查都不会执行。

我会确保您没有将b1r的边界设置为整个屏幕,也不是其他一些不正确的(或可能是“正确的”但具有破坏性的值)。

如果没有更多代码,很难真正调试它。

09-27 14:42