Android 如何绘制从起始角色到另一个角色的箭头Libgdx

Android 如何绘制从起始角色到另一个角色的箭头Libgdx,android,libgdx,scene2d,Android,Libgdx,Scene2d,我的游戏有两张桌子。当我点击第一个表格的一个单元格时,我想画一个箭头跟随我的手指,这样我就可以将箭头从第二个表格移动到一个表格单元格。我需要知道哪个是初始单元格,哪个是最终单元格(箭头从哪里开始,箭头从哪里结束)。如果用户将手指从屏幕上取下,而手指不在桌面单元格上,我希望什么也不会发生 ArrayList<Actor> myActor = new ArrayList<Actor>(); ArrayList<Actor> anotherActor

我的游戏有两张桌子。当我点击第一个表格的一个单元格时,我想画一个箭头跟随我的手指,这样我就可以将箭头从第二个表格移动到一个表格单元格。我需要知道哪个是初始单元格,哪个是最终单元格(箭头从哪里开始,箭头从哪里结束)。如果用户将手指从屏幕上取下,而手指不在桌面单元格上,我希望什么也不会发生

    ArrayList<Actor> myActor = new ArrayList<Actor>();
    ArrayList<Actor> anotherActor = new ArrayList<Actor>();
    // fill array with my actors
    Table firstTable = new Table();
    for (int i = 0; i < 7; i++) {
    firstTable.add(myActor.get(i));
    myActor.get(i).addListener(new ActorGestureListener() {
        public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
            // draw arrow that follows finger
            }

        public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
            // if event finished and was on a cell from the
            // second table get starting actor and finishing actor
            // else nothing happens
            }
   });
  }
  Table secondTable = new Table();
  for (int i = 0; i < 7; i++) {
  secondTable.add(anotherActor.get(i));
  }
ArrayList myActor=new ArrayList();
ArrayList anotherActor=新的ArrayList();
//用我的演员填充阵列
Table firstTable=新表();
对于(int i=0;i<7;i++){
add(myActor.get(i));
myActor.get(i).addListener(新ActorGestureListener(){
公共无效接地(InputEvent事件、浮点x、浮点y、整数指针、整数按钮){
//画出跟在手指后面的箭头
}
公共无效修补(InputEvent事件、浮点x、浮点y、整数指针、整数按钮){
//如果事件已完成且位于
//第二个表获得起始演员和结束演员
//否则什么也不会发生
}
});
}
Table secondTable=新表();
对于(int i=0;i<7;i++){
第二个表.add(另一个actor.get(i));
}
我该怎么做呢?

希望这有帮助

Actor startFromActor = null; // Variable outside of method

public void foo() {
    // smt before
    ArrayList<Actor> myActor = new ArrayList<Actor>();
    ArrayList<Actor> anotherActor = new ArrayList<Actor>();
    // fill array with my actors
    Table firstTable = new Table();
    Table secondTable = new Table();

    for (int i = 0; i < 7; i++) {
        final Actor curActor = myActor.get(i);
        firstTable.add(curActor);
        curActor.addListener(new ActorGestureListener() {
            public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
                if (pointer > 0) return false; // For only one finger
                startFromActor = curActor;
                // draw arrow that follows finger
            }
       });
    }
    for (int i = 0; i < 7; i++) {
        final Actor curActor = anotherActor.get(i);
        secondTable.add(curActor);
        curActor.addListener(new ActorGestureListener() {
            public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
                if (pointer > 0) return false; // For only one finger
                if (startFromActor != null) {
                    // do something
                    // startActor - actor from first table
                    // curActor - actor from second table

                    startFromActor = null; // do not forget to null-setting
                }
            }
       });
    }
}
Actor startFromActor=null;//方法外变量
公共图书馆{
//smt之前
ArrayList myActor=新的ArrayList();
ArrayList anotherActor=新的ArrayList();
//用我的演员填充阵列
Table firstTable=新表();
Table secondTable=新表();
对于(int i=0;i<7;i++){
最终演员策展人=myActor.get(i);
第一表。添加(馆长);
策展人addListener(新ActorGestureListener(){
公共无效接地(InputEvent事件、浮点x、浮点y、整数指针、整数按钮){
if(指针>0)返回false;//仅用于一个手指
StartFromator=策展人;
//画出跟在手指后面的箭头
}
});
}
对于(int i=0;i<7;i++){
最终演员策展人=另一名演员.get(i);
第二表.增补(馆长);
策展人addListener(新ActorGestureListener(){
公共无效修补(InputEvent事件、浮点x、浮点y、整数指针、整数按钮){
if(指针>0)返回false;//仅用于一个手指
if(startFromActor!=null){
//做点什么
//startActor-第一个表中的演员
//策展人-第二桌演员
startFromActor=null;//不要忘记设置为null
}
}
});
}
}

如果您需要从一张桌子到另一张桌子的两个方向,您应该为每个
Actor
设置
touchUp
touchUp
事件,然后检查开始和结束Actor的所有者是谁

您可以使用libgdx中的内置实用程序绘制箭头:

在初始化时构建
网格
建议只构建一个网格(通常在init时),然后在运行时根据应用程序所需的箭头数重复使用(渲染)它。对于构建网格的曲面,可以使用和。例如:

MeshBuilder MeshBuilder=新的MeshBuilder();
meshbuilder.begin(VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal,GL20.GL_三角形);
ArrowShapeBuilder.build(
网格生成器,
0,0,0/*起始xyz*/
5,5,0/*结束xyz*/
0.1f,/*箭头的百分比*/
0.1f,/*阀杆厚度百分比*/
10/*划分,基本上为详细级别*/
);
Mesh debug_arrow=meshbuilder.end();
通过上述步骤,可构建可渲染网格

将箭头渲染到应用程序 此步骤非常简单,前提是已提供:

debug_arrow.render(batch.getShader(),GL20.GL_三角形);
然后,通过舞台投影矩阵设置箭头的位置。批处理应该可用,至少渲染阶段有一个到


注意:网格参数musn并不总是
GL20.GL\u三角形
,但参数必须在
meshbuilder.begin
debug\u arrow.render

中匹配。问题更多的是如何绘制一个跟随用户手指并从第一个参与者开始的箭头。真的吗?只需使用
DragListener
DragStart | Stop
方法即可