2013-07-09 1 views
1

Я разрабатываю игру, такую ​​как поиск слов. Я использовал AndEngine для этого и для displayig сетки слов, которые я использовал TiledMap. В этой игре нам нужно присоединиться к буквам, чтобы сделать слово, пока мы перетаскиваем его пальцы, он будет рисовать линию на плитки и устанавливать связь между буквами. Я умею рисовать линии вертикально и горизонтально точно, но по мере того, как я пытаюсь провести линию по диагонали, она идет к соседней плитке и тянет линию от последней тротуарной плитки до соседней плитки. Но когда я тщательно перемещаюсь к диагональным плиткам, он точно рисует линию.Word Search Game Issue

Может ли кто-нибудь помочь мне решить эту проблему?

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); 
      } 
     } 
    } 

ответ

0

Звуки для меня, как вы должны большие хитбоксы для пальца, что нет места, где палец может двигаться diagonaly без регистрации хит на горизонтальной или вертикальной коробке.

Если это так, его легко решить, уменьшив размер «hitbox» на пару пикселей. Это позволит вам протащить палец по углам.

+0

я проверил это, но получить такую ​​же проблему .. – Saurabh

0

Как сказал Agnfolie, уменьшите размер hitbox, просто не только несколько пикселей, но попытайтесь уменьшить их до 50%.

В основном, только если вы рисуете середину поля, оно принимает его, а не если вы просто касаетесь границы.

+0

означает, что я уменьшить диапазон касания рядом с центром плитки, так ли? – Saurabh

+0

вы уменьшаете размер hitbox по направлению к центру следующим образом: | __ [hitbox] __ | __ [hitbox] __ | –

1

Другим подходом было бы использовать круговой hitbox. Это позволило бы пальцу пройти по углам, но никогда не пропускать плитку и прыгать, как лошадь в шахматы.

Можете ли вы опубликовать какой-либо код для вашего пальца?

Edit *: Я бы экономить previousTile, содержащий мою последнюю действительную плитку и затем

tmxLayer1.getTMXTileAt(xMove, yMove); 

возвращения нуля, если я был между круговыми хитбоксами. Пример getTMXTileAt:

  1. найти плитка как функция делает сейчас.
  2. найти центр плитки.
  3. Проверьте, находится ли моя нажатая точка в определенном «радиус чувствительности» этой центральной точки
  4. только считайте плиту действительной, если она находится внутри. Если нет: мой палец находится между плитами.

Вам необходимо добавить нижние границы как к x, так и к y, если вы все еще хотите сделать подход к коробке. Я по-прежнему рекомендую переключиться на круговой. Это также проще.

Объявить статического Int напр чувствительности: 20

затем сделать

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 
+0

Пожалуйста, проверьте мои изменения. – Saurabh

+0

, пожалуйста, отредактируйте n сообщите мне, если я прав. – Saurabh

+0

привет, проблема, перед которой я сталкиваюсь, хочу нарисовать линию на плитки 1-> 6-> 11-> 16 (это означает диагональ). Не могли бы вы помочь мне в примере кода, где мне нужно изменить? – Saurabh

 Смежные вопросы

  • Нет связанных вопросов^_^