libgdx关于手机UI控件拖拽

本文介绍了如何在libgdx中使用InputProcessor处理手机屏幕事件,特别关注于实现控件的移动,包括基础的触摸拖拽功能和自定义的控件位置管理。作者还提到了使用Scene2D框架的可能性和自己的实现思路。
摘要由CSDN通过智能技术生成

关于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;
                 }

因为个人原因没有写的很开放,都是一些基础写法没写进阶
如果各位大佬有更好的思路欢迎交流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值