单词搜索游戏问题

时间:2013-07-09 07:18:04

标签: android andengine tile

我正在开发像文字搜索这样的游戏。我已经使用了AndEngine这个以及我使用过TiledMap的显示网格。在这个游戏中,我们需要连接字母来制作一个单词,因为我们拖动它们会在瓷砖上绘制线条并在字母之间建立连接。我能够精确地垂直和水平地绘制线条但是当我尝试沿对角线绘制线条时,它会转到附近的瓷砖并从最后触摸的瓷砖到附近的瓷砖绘制线条。但是当我小心地移动到对角线瓷砖时,它会准确地绘制线条。

任何人都可以帮我解决这个问题吗?

e.g.
----------------
|1   2   3   4 |
|5   6   7   8 |
|9  10  11  12 |
|13 14  15  16 |
----------------

如上所示,例如

我可以为"1234" & "159"画线,这意味着所有水平和垂直位置都能正常工作。 但对"963"而言,它不如我为水平和垂直绘制的那样准确。

case TouchEvent.ACTION_MOVE:

    xMove = pSceneTouchEvent.getX();
    yMove = pSceneTouchEvent.getY();
    TMXLayer tmxLayer1 =  mTMXTiledMap.getTMXLayers().get(0);
    TMXTile tmxTile1 = tmxLayer1.getTMXTileAt(xMove, yMove); 
    tmxTile1.setTextureRegion(mPlayerTextureRegion);

    if (tmxTile1.getTileRow() == 1 && tmxTile1.getTileColumn() == 1) {
    //letter M
        xMove = pSceneTouchEvent.getX();
        yMove = pSceneTouchEvent.getY();
        //yMove = pSceneTouchEvent.getX();
        if (xMove >= (TILESQUARE * 1)+20 && yMove >= (TILESQUARE * 1)+20) {//added
            yMove = (TILESQUARE * 1) + 30;//gets x-cordinate of center
            xMove = (TILESQUARE * 1) + 30;//gets y-cordinate of center
            Log.i("On Action Move X11", ""+xMove);
            Log.i("On Action Move Y11", ""+yMove);
                          //tmxTile1.setTextureRegion(mPlayerTextureRegion);
            if (!addedAmazeM) {
                addedAmazeM = true;
                System.out.println("You are in (1,1) tile");
                wordArray.add("M");
                HashMap<Float, Float> moveXY = new HashMap<Float, Float>();
                moveXY.put(xMove, yMove);
                //linePath.add(moveXY);
                Point tile11Pt = new Point();
                tile11Pt.x = (int) xMove;
                tile11Pt.y = (int) yMove;
                linePoints.add(tile11Pt);
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

另一种方法是使用圆形hitbox。这将使你的手指能够通过角落,但绝不会跳过瓷砖,像国际象棋中的马一样跳跃。

你可以为你的手指检查发布一些代码吗?

修改*: 我将保存包含我最新的有效磁贴的previousTile,然后

tmxLayer1.getTMXTileAt(xMove, yMove);
如果我在圆形hitbox之间,

返回null。 示例getTMXTileAt:

  1. 找到功能正在执行的磁贴。
  2. 找到瓷砖中心。
  3. 检查我的按压点是否在某个范围内 该中心点的“灵敏度半径”
  4. 仅将图块计为有效内容。如果不是:我的手指在瓷砖之间。
  5. 如果你仍然想要一个盒子方法,你还需要为x和y添加下限。我仍然建议改为循环。这样更容易。

    为灵敏度ex:20

    声明一个静态int

    然后做

    int tX,tY;
    tX = moveX - tileSquareCenterX;
    tY = moveY - tileSquareCenterY;
    tX *= tX;
    tY *= tY;
    if(tX + tY < sensitivity*sensitivity)
    

    而不是

    (xMove >= (TILESQUARE * 1)+20 && yMove >= (TILESQUARE * 1)+20) {//added
    

答案 1 :(得分:0)

对我而言,就像你需要手指的大型打击盒一样,没有空间可以在没有在水平或垂直方框上注册命中的情况下手指移动。

如果是这种情况,应该通过将“hitbox”的大小减少几个像素来轻松解决。这样您就可以将手指拖过角落。

答案 2 :(得分:0)

像Agnfolie所说的那样,减少hitbox的大小,不仅仅是几个像素,而是尝试将它们减少到50%。

基本上,只有当你在领域的中间画画时才接受它,而不是你只是触摸边框。