关于libgdx的手机控件移动方式和方法
libgdx中有一个InputProcessor负责监听手机屏幕事件
下面是api代码
ipr=new InputProcessor(){
@Override
//当一个键被按下时
public boolean keyDown(int p1){
// TODO: Implement this method
return false;
}
@Override
//当一个键被抬起时
public boolean keyUp(int p1){
// TODO: Implement this method
return false;
}
@Override
//键入一个键调用
public boolean keyTyped(char p1){
// TODO: Implement this method
return false;
}
@Override
//当鼠标按下或屏幕被触摸按下时
public boolean touchDown(int p1, int p2, int p3, int p4){
return false;
}
@Override
//当鼠标抬起或屏幕被触摸抬起时
public boolean touchUp(int p1, int p2, int p3, int p4){
return false;
}
@Override
//当鼠标拖拽或触摸拖拽时
public boolean touchDragged(int screenX, int screenY, int pointer){
// TODO: Implement this method
return false;
}
@Override
//当鼠标移动时
public boolean mouseMoved(int p1, int p2) {
// TODO: Implement this method
return false;
}
@Override
//当鼠标滑轮滚动时
public boolean scrolled(int p1) {
// TODO: Implement this method
return false;
}
//end
};
Gdx.input.setInputProcessor(ipr);
}
gdx中控件自带一种监听,每个控件都可以添加一个InputListener监听事件
,不过这种监听是基于控件本身的,不支持控件拖拽,还可以使用Scene2D框架来管理游戏对象和处理触摸事件
对此我的思路是创建一个新的InputProcessor通过在InputProcessor里的touchDragged进行判断是否触摸到控件,如果碰到则移动
相关代码如下
//控件拖拽
ipr = new InputProcessor(){
@Override
public boolean touchDragged(int p1, int p2, int p3){
if(isTouched(movebutton,new Vector2(p1,p2))){
widgetsetPosition(movebutton,p1,p2);
}else if(isTouched(attackbutton,new Vector2(p1,p2))){
widgetsetPosition(attackbutton,p1,p2);
}
return false;
}}
//实时移动控件位置
private void widgetsetPosition(Image ig,int p1,int p2){
ig.setPosition(p1-(ig.getWidth()/2),(Gdx.graphics.getHeight()-p2)-(ig.getHeight()/2));
}
//是否触摸到
private boolean isTouched(Image ig,Vector2 position){
if(position.x>=ig.getX()&&position.x<=ig.getX()+ig.getWidth()){
return true;
}
return false;
}
因为个人原因没有写的很开放,都是一些基础写法没写进阶
如果各位大佬有更好的思路欢迎交流