现在的完成阶段,游戏场景内做了3个监听

我的地图(五层图片)主要存放在里面演员BgActor 里

3个监听:

actor的监听:监听手指点击地图位置,换算坐标

addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                // 点击图片,图片隐藏![这里写图片描述](https://img-blog.csdn.net/20160425220710777)
                // 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:手势监听因为安卓环境没有配好的原因暂时未做,随后会补上

posted on 2019-03-04 21:58  黑狱  阅读(179)  评论(0编辑  收藏  举报