2013-12-05 4 views
0

Я делаю игру, где мне нужно перетаскивать объекты экрана. Я создаю объекты Screen, используя метод SpriteBatch.draw (....), где я использую вращение, используя только один регион текстуры. Мне нужно реализовать drag on object, но я не могу запустить компонент перетаскивания. enter image description hereПеретаскивание в libgdx на SpriteBatch

+0

вы можете поделиться дополнительной информацией о том, как вы перетаскиваете свой объект –

+0

Мне нужно перетащить объект, в который он коснулся. Объект находится через метод SpriteBatch.draw. У меня есть поиск по многим причинам, но они не полезны. Можете ли вы предоставить простой объект области текстуры, перетаскивающий код src, который уже запущен через spritebatch ???? – MGDroid

+1

Я никогда не вращаюсь через текстуру regioni, чтобы преобразовать его в sprite, а затем повернуть его. Отправка кода в ответ через некоторое время –

ответ

1
package com.dance.utils; 

import com.badlogic.gdx.input.GestureDetector; 
import com.badlogic.gdx.input.GestureDetector.GestureListener; 
import com.badlogic.gdx.math.Vector2; 
import com.badlogic.gdx.math.Vector3; 
import com.dance.screen.GameScreen; 


public class GameTouchProcessor 
{ 
private GameScreen gameScreen; 
Vector3 touchPoint=new Vector3(); 
Vector3 relativeTouchPoint=new Vector3(); 

Vector2 lastPosition = new Vector2(); 

GestureListener listner=new GestureListener() 
{ 

    @Override 
    public boolean zoom(float arg0, float arg1) { 
     // TODO Auto-generated method stub 
     return false; 
    } 


    @Override 
    public boolean fling(float arg0, float arg1, int arg2) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean longPress(float arg0, float arg1) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean pan(float arg0, float arg1, float arg2, float arg3) { 
     if(gameScreen.isPlayerDraged) 
     { 
     gameScreen.cam.unproject(relativeTouchPoint.set(arg0, arg1, 0)); 
     GameScreen.position.set(lastPosition.x + relativeTouchPoint.x - touchPoint.x, lastPosition.y + relativeTouchPoint.y - touchPoint.y); 
     } 
     return false; 
    } 

    @Override 
    public boolean panStop(float arg0, float arg1, int arg2, int arg3) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean tap(float arg0, float arg1, int arg2, int arg3) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean touchDown(float arg0, float arg1, int arg2, int arg3) { 
     gameScreen.cam.unproject(touchPoint.set(arg0, arg1, 0)); 
     lastPosition.set(GameScreen.position); //HERE POSITION IS A VECTOR2 I AM DRAWING MY OBJECT ON THIS POSITION SO WHEN POSITION IS CHANGED OBJECT MOVES 
     return false; 
    } 


    @Override 
    public boolean pinch(Vector2 arg0, Vector2 arg1, Vector2 arg2, 
      Vector2 arg3) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
}; 

public GestureDetector detector=new GestureDetector(listner) 
{ 

    public boolean touchUp(int arg0, int arg1, int arg2, int arg3) 
    { 
     gameScreen.isPlayerDraged=false; 
     return false; 
    } 
}; 


public GameTouchProcessor(GameScreen gameScreen) 
{ 
    this.gameScreen=gameScreen; 
} 

}

в игре SCREEN (или любой другой экран и хотите, чтобы перетащить) PUT ЭТО

inputMultiplexer=new InputMultiplexer(); 
    inputMultiplexer.addProcessor(game); 
    inputMultiplexer.addProcessor(new GameTouchProcessor(this).detector); 
    Gdx.input.setInputProcessor(inputMultiplexer); 

Dont запутаться с отрывками моего кода

в gamescreen я Я рисую свой объект на постулировании вектора2, и я модифицирую вектор2 в методе PAN

для лучшей информации о входном процессоре

input processor

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

Так что если вы добавите свой proccesor, чем прокси-сервер по умолчанию Gdx, не будет работать, и вы не получите много важных входных вызовов, поэтому вам придется обрабатывать их явно.

Таким образом, чтобы избежать этого, мы создаем мультиплексор и добавьте как входную proceesor и ваш обычай его, чтобы он работает со всем вызовом поддерживает

здесь моя игра класс реализует inputproceesor (по умолчанию один). я объединил процессор ввода по умолчанию с моим настраиваемым

+0

позвольте мне проверить ... tx – MGDroid

+0

один вопрос, что такое inputMultiplexer.addProcessor (game); означает – MGDroid

+0

редактирование ответа на эксплантацию –

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