现在的完成阶段,游戏场景内做了3个监听
我的地图(五层图片)主要存放在里面演员BgActor 里
3个监听:
actor的监听:监听手指点击地图位置,换算坐标
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,向右上方向负数扩展 // 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来做手势滑动监听,随滑动改变方向
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 是结束时,手指按下的点。 } 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; }
操作电脑时的监听(主要是鼠标中键)
//电脑 class InputProcessorEvent implements InputProcessor { @Override public boolean keyDown(int keycode) { /*if (keycode == Keys.BACK) { // 处理返回事件 } else if (keycode == Keys.MENU) { // 处理菜单事件 }*/ return true; // 如果此处设置为false那么不会执行key up } @Override public boolean keyUp(int keycode) { return true; } @Override public boolean keyTyped(char character) { // 可以输出按键的字母和数字,不过貌似不好使 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 缩放时调整镜头在中间 //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; } }
触摸屏幕的监听
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", ""); } }
根据平台选择监听
processorEvent = new InputProcessorEvent();//手势监听
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:手势监听因为安卓环境没有配好的原因暂时未做,随后会补上
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!