現(xiàn)在的完成階段,游戲場景內(nèi)做了3個監(jiān)聽
我的地圖(五層圖片)主要存放在里面演員BgActor 里
3個監(jiān)聽:
actor的監(jiān)聽:監(jiān)聽手指點擊地圖位置,換算坐標
addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { // 點擊圖片,圖片隱藏 // super.clicked(event, x, y); // Gdx.app.log("點擊的精靈位置1", "x:" + (getX()/getZoom()+x)+" y:" // +(getY()/getZoom()+ y)); // 由于要在actor等中使用坐標繪圖,所以采用libgdx的actor坐標系 // 左下為0,0,向右上方向負數(shù)擴展 // Gdx.app.log("點擊背景位置1", "bgx:" + getX()+" bgy:" + getY()+" // zoom:" + getZoom()+" x:" + x+" y:" + y+" rgw:" + // getRegion().getRegionWidth()+" rgh:" + // getRegion().getRegionHeight()); // Gdx.app.log("點擊背景位置2", "actX:" + (getX()-x)/getZoom()+" // actY:"+ (getY()-y)/getZoom()); coord = GameMap.getHotCell(getImgXCoordByActX((getX() - x) / getZoom()), getImgYCoordByActY((getY() - y) / getZoom())); Gdx.app.log("點擊背景位置3", "imgX:" + getImgXCoordByActX((getX() - x) / getZoom()) + " imgY:" + getImgYCoordByActY((getY() - y) / getZoom())); Gdx.app.log("點擊背景位置4", "imgX:" + coord.getX() + " imgY:" + coord.getY()); } });
Gdx.input.justTouched來做手勢滑動監(jiān)聽,隨滑動改變方向
if (Gdx.input.justTouched() && isTouching == false) { isTouching = true; touchBaseX = Gdx.input.getX(0); touchBaseY = Gdx.input.getY(0); //touchBaseX += cam.position.x - GAMESTAGE_WIDTH / 2; //Gdx.app.log("觸摸", "1"); // isTouched 是結(jié)束時,手指按下的點。 } else if (Gdx.input.isTouched(0) && isTouching == true) { touch_X = Gdx.input.getX(0); touch_Y = Gdx.input.getY(0); moveX=(touchBaseX-touch_X)/20; moveY=(touch_Y-touchBaseY)/20; if(moveX>50) { moveX=50; } if(moveX<-50) { moveX=-50; } if(moveY>50) { moveY=50; } if(moveY<-50) { moveY=-50; } bgActor.setX(bgActor.getX()-moveX); bgActor.setY(bgActor.getY()-moveY); //Gdx.app.log("觸摸 起點:", "touchBaseX:"+touchBaseX+" touchBaseY:"+touchBaseY); //Gdx.app.log("觸摸 終點:", "touch_X:"+touch_X+" touch_Y:"+touch_Y); //Gdx.app.log("觸摸 移動:", "moveX:"+moveX+" moveY:"+moveY); }else { isTouching =false; }
操作電腦時的監(jiān)聽(主要是鼠標中鍵)
//電腦 class InputProcessorEvent implements InputProcessor { @Override public boolean keyDown(int keycode) { /*if (keycode == Keys.BACK) { // 處理返回事件 } else if (keycode == Keys.MENU) { // 處理菜單事件 }*/ return true; // 如果此處設(shè)置為false那么不會執(zhí)行key up } @Override public boolean keyUp(int keycode) { return true; } @Override public boolean keyTyped(char character) { // 可以輸出按鍵的字母和數(shù)字,不過貌似不好使 return true; } @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { return true; } @Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { return true; } @Override public boolean touchDragged(int screenX, int screenY, int pointer) { return true; } @Override public boolean mouseMoved(int screenX, int screenY) { return true; } @Override public boolean scrolled(int amount) { //Gdx.app.log("滑輪滾動", amount+""); if(amount>0) { //TODO 縮放時調(diào)整鏡頭在中間 //bgActor.setX(bgActor.getX()-bgActor.getZoom()*bgActor.getRegion().getRegionWidth()/2); //bgActor.setX(bgActor.getY()-bgActor.getZoom()*bgActor.getRegion().getRegionHeight()); bgActor.setZoom(bgActor.getZoom()+0.01f); //Gdx.app.log("相機zoom2", bgActor.getZoom()+""); }else { bgActor.setZoom(bgActor.getZoom()-0.01f); //Gdx.app.log("相機zoom", bgActor.getZoom()+""); } return true; } }
觸摸屏幕的監(jiān)聽
class MapListener implements GestureListener{ @Override public boolean touchDown(float x, float y, int pointer, int button) { Gdx.app.log("touchDown", "x:" + x+" y:" + y); return false; } @Override public boolean tap(float x, float y, int count, int button) { Gdx.app.log("tap", "x:" + x+" y:" + y); return false; } @Override public boolean longPress(float x, float y) { Gdx.app.log("longPress", "x:" + x+" y:" + y); return false; } @Override public boolean fling(float velocityX, float velocityY, int button) { Gdx.app.log("fling", "velocityX:" + velocityX+" velocityY:" + velocityY); return false; } @Override public boolean pan(float x, float y, float deltaX, float deltaY) { Gdx.app.log("touchDown", "x:" + x+" y:" + y); return false; } @Override public boolean panStop(float x, float y, int pointer, int button) { Gdx.app.log("touchDown", "x:" + x+" y:" + y); return false; } @Override public boolean zoom (float originalDistance, float currentDistance){ Gdx.app.log("zoom", "originalDistance:" + originalDistance+" currentDistance:" + currentDistance); //TODO 觸摸縮放事件 return false; } @Override public boolean pinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer){ Gdx.app.log("pinch", ""); return false; } @Override public void pinchStop () { Gdx.app.log("pinchStop", ""); } }
根據(jù)平臺選擇監(jiān)聽
processorEvent = new InputProcessorEvent();//手勢監(jiān)聽
mapListener=new MapListener();
Gdx.app.log("平臺", Gdx.app.getType()+"");
switch (Gdx.app.getType()) {
case Desktop:// Code for Desktop applicationbreak;
multiplexer.addProcessor(processorEvent);
case Android:// Code for Android applicationbreak;
multiplexer.addProcessor(new GestureDetector(mapListener));
case WebGL:// Code for WebGL applicationbreak;
multiplexer.addProcessor(processorEvent);
default:// Unhandled (new?) platform applicationbreak;
multiplexer.addProcessor(processorEvent);
multiplexer.addProcessor(new GestureDetector(mapListener));
}/**/
Gdx.input.setInputProcessor(multiplexer);
Ps:手勢監(jiān)聽因為安卓環(huán)境沒有配好的原因暫時未做,隨后會補上
浙公網(wǎng)安備 33010602011771號