2015-10-07 41 views
2
public boolean touchDragged(int screenX, int screenY, int pointer) { 

    if(check) { 
     sprite.setPosition(screenX - sprite.getWidth()/2, Gdx.graphics.getHeight() - screenY - sprite.getHeight()/2); 
     rect.setPosition(screenX - sprite.getWidth()/2, Gdx.graphics.getHeight() - screenY - sprite.getHeight()/2); 
    } 
    return false; 
} 

這是我的自定義輸入處理器類中的方法我在我的主輸入多路複用器中使用輸入多路複用器,因爲我有2個類。同時拖動不會移動精靈我一次只能移動一個精靈。 我的意圖是同時拖動2個精靈。libgdx中的輸入處理器/多路複用器

感謝您的幫助,併爲我的糟糕英語感到抱歉。

+0

您是否想要一次移動多個精靈? –

+0

是的,這是我的意圖 – Boom

+0

謝謝!@DavidAnderton – Boom

回答

2

我不知道這是不是最好的辦法,但還挺解決方案可能是這樣的:

1.添加,讓你知道你將有多少對象允許在移動不變同時

private static final int MAX_TOUCHES = 4; 

2.添加一個集合具有固定大小,這樣,你會管理當前是可能將所有的精靈:

現在10

,在你的類,你正在處理觸摸,實施touchDown()touchDragged()touchUp()

/** 
* In the touchDown, add the sprite being touched 
**/ 
@Override 
public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
    // Just allow 4 sprites to move at same time 
    if(pointer >= MAX_TOUCHES) return true; 

    // Get the sprite at this current position... 
    Sprite sprite = getSpriteAtThisPosition(screenX, screenY); 

    // If sprite found, add to list with current pointer, else, do nothing 
    if(sprite != null) { 
     sprites.set(pointer, sprite); 
    } 
    return true; 
} 

getSpriteAtThisPosition()就是這樣在那個位置返回第一電流精靈的方法,可能會返回null


/** 
* In the touchDragged, move this sprite 
**/ 
@Override 
public boolean touchDragged(int screenX, int screenY, int pointer) { 
    // Just allow 4 sprites to move at same time 
    if(pointer >= MAX_TOUCHES) return false; 

    // Get the sprite with the current pointer 
    Sprite sprite = sprites.get(pointer); 

    // if sprite is null, do nothing 
    if(sprite == null) return false; 

    // else, move sprite to new position 
    sprite.setPosition(screenX - sprite.getWidth()/2, 
         Gdx.graphics.getHeight() - screenY - 
         sprite.getHeight()/2); 
    return false; 
} 

/** 
* In the touchUp, remove this sprite from the list 
**/ 
@Override 
public boolean touchUp(int screenX, int screenY, int pointer, int button) { 
    // Just allow 4 sprites to move at same time 
    if(pointer >= MAX_TOUCHES) return true; 

    // remove sprite at pointer position 
    sprites.set(pointer, null); 
    return true; 
} 
+0

感謝虐待儘快嘗試了這一點我在家 – Boom

0

InputMultiplexer是不是有兩類對象的處理移動,但要處理兩個輸入處理器(或以上),你想擁有 - 例如,當你有不止一個Stage,並希望與他們每個人的玩家互動。

你應該在這裏做什麼將記住什麼指針附加到被觸摸的對象,然後根據指針的移動來移動它。指針只是例如手指枚舉的ID。因此當你用第一根手指觸摸屏幕時,它是指針,第二個是 - 但是!如果你將第一手保持秒,第二個仍然是所以它是完美的這種用法。

要處理記憶指針ID,你還需要實現着陸監聽方法

的代碼示例會像:

  HashMap<Integer, Sprite> ids = new HashMap<Integer, Sprite>(); 

      ... 

      public boolean touchDown (int x, int y, int pointer, int button) 
      { 
       Sprite sprite = getSprite(x, y); //getSprite should iterate over all sprites in your game checking if x/y is inside one of them - you need to implement this one 

       ids.put(pointer, sprite); 

       return true; 
      } 

      public boolean touchUp (int x, int y, int pointer, int button) 
      { 
       ids.remove(pointer); //removing from hashmap 

       return false; 
      } 

      public boolean touchDragged (int x, int y, int pointer) 
      { 
       Sprite sprite = ids.get(pointer); 

       if(sprite != null) 
       { 
        sprite.setPosition... //and so on 
       } 
       return false; 
      } 

用於獲取有關多點觸控操作,您可以檢查出this tutorial更多的信息。