2013-07-09 73 views
1

我正在開發一個類似單詞搜索的遊戲。我已經使用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); 
      } 
     } 
    } 

回答

0

聽起來像你對我有很大hitboxes的手指,沒有空間,手指可以diagonaly移動,而不在水平或垂直盒註冊命中。

如果是這種情況,應該通過將「hitbox」的大小減小几個像素來輕鬆解決。這將使您能夠通過角落拖動手指。

+0

我檢查,但得到同樣的問題.. – Saurabh

0

就像Agnfolie說的那樣,減小hitbox的大小,不僅僅是幾個像素,而是儘量減少它們到50%。

基本上,只有當您通過字段的中間繪製它接受它,而不是如果你只是觸摸邊框。

+0

意味着我減少範圍

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

代替在瓷磚中心附近觸摸,是這樣嗎? – Saurabh

+0

你可以像這樣減小hitbox的大小: | __ [hitbox] __ | __ [hitbox] __ | –

1

另一種方法是使用圓形的hitbox。這樣可以讓你的手指通過角落,但不會跳過瓷磚並像國際象棋中的馬一樣跳躍。

你可以發佈一些代碼爲你的fingerchecking?

編輯*: 我會被保存包含我的最新有效拼貼的previousTile,然後有

tmxLayer1.getTMXTileAt(xMove, yMove); 

返回NULL,如果我是在圓形hitboxes之間。 示例getTMXTileAt:

  1. 查找功能現在正在執行的功能塊。
  2. 找到瓷磚的中心。
  3. 檢查我的按壓點是否在該中心點的某個特定的 「靈敏度半徑」內
  4. 只有在該範圍內時,纔會將該瓦片計爲有效。如果沒有:我的手指在瓷磚之間。

如果你仍然想要做一個盒子的方法,你需要將下限添加到x和y。我仍然建議轉換爲循環。這也很容易。

聲明靜態INT靈敏度例如:20

然後執行

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

請檢查我的編輯。 – Saurabh

+0

請檢查編輯n讓我知道我是否正確。 – Saurabh

+0

嗨,我面臨的問題是,我想在瓷磚1-> 6-> 11-> 16(它表示對角線)上畫一條線。你能幫我在代碼示例中,我應該改變? – Saurabh