对于我的游戏,我总是使用singletouch,所以我总是在onTouch()方法中跟踪指针,如下所示: 使用event.getPointerId(0)将指针Id置于(0);当pId == 0时,其中pId是指针Id - 当pId!= - 1(当主要指针再次被提升时分配的标准值I)并且如果当前指针索引与指针Id的指针indes不相同时,将不会计算其他指针保存在pId
像这样: switch(e.getAction())
{
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_DOWN:
if(pID!=-1)break;
...
pID=e.getPointerId(0);
...
break;
case MotionEvent.ACTION_MOVE:
if(pID==-1||e.getActionIndex()!=e.findPointerIndex(pID))break;
...
break;
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_UP:
if(pID==-1||e.getActionIndex()!=e.findPointerIndex(pID))break;
...
pID=-1;
...
break;
}
但是现在我偶然发现了我在2周前写过的代码,其中我以其他方式执行此操作,因为我想对多点触控做出反应(最多允许两个触摸指针进行缩放):
switch(e.getAction())
{
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_DOWN:
if(tP1.getPointerIndex()==-1&&tP2.getPointerIndex()==-1)
{
tP1.setPointerIndex(currentPointerIndex);
mode=Mode.SINGLE;
}
else if(tP1.getPointerIndex()!=-1&&tP2.getPointerIndex()==-1&&!isDragging)
{
tP2.setPointerIndex(currentPointerIndex);
mode=Mode.MULTI;
}
if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
{
tP1.X=e.getX();
tP1.Y=e.getY();
tP1.oldX=tP1.X;
tP1.oldY=tP1.Y;
}
else if(e.findPointerIndex(tP2.getPointerIndex())==currentPointerIndex)
{
tP2.X=e.getX();
tP2.Y=e.getY();
tP2.oldX=tP2.X;
tP2.oldY=tP2.Y;
}
else break;
...
break;
case MotionEvent.ACTION_MOVE:
if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
{
tP1.X=e.getX();
tP1.Y=e.getY();
}
else if(e.findPointerIndex(tP2.getPointerIndex())==currentPointerIndex)
{
tP2.X=e.getX();
tP2.Y=e.getY();
}
else break;
...
break;
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_UP:
if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
{
tP1.X=e.getX();
tP1.Y=e.getY();
}
else if(e.findPointerIndex(tP2.getPointerIndex())==currentPointerIndex)
{
tP2.X=e.getX();
tP2.Y=e.getY();
}
else break;
if(mode==Mode.SINGLE)
{
mode=Mode.NONE;
tP1.resetPointerIndex();
}
else if(mode==Mode.MULTI)
{
mode=Mode.SINGLE;
if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
{
tP1.resetPointerIndex();
tP1.setPointerIndex(tP2.getPointerIndex());
tP1.X=tP2.X;
tP1.Y=tP2.Y;
tP1.oldX=tP2.oldX;
tP1.oldY=tP2.oldY;
tP2.resetPointerIndex();
}
else if(e.findPointerIndex(tP2.getPointerIndex())==currentPointerIndex)
{
tP2.resetPointerIndex();
}
}
break;
}
tP1和tP2是跟踪最后x和y坐标以及指针索引的类对象。所以他们代表了两个指针。如果第一个指针被抬起而第二个指针仍然打开,我总是在第一个指针上交换第二个指针。现在它真的很尴尬,因为我为我的一位同事写了这段代码,花了几块钱。
所以我jsut跟踪指针的索引,但它们有时会改变。我没注意到它,因为一切都很好。但现在,当我遇到它时,我注意到了这一点。我该怎么办。我是否需要更改它,或者您认为没有问题让这段代码成为现实吗?
我只是假设它可能出错,因为我不跟踪指针Id但只跟踪指针Index。
此外,在测试时,我从未体验过它,例如第一次触摸时的主指针交换到另一个索引,但是当另一个触摸指针出现故障时为0。
我感到非常愚蠢,以至于我没有注意到它,所以现在我需要一个很好的建议如何表现,请帮助......
代码工作真的很奇怪,因为我这样做:
if(e.findPointerIndex(tP1.getPointerIndex())==currentPointerIndex)
所以Android不仅将第一个指针的索引赋值为0,而且还将指针ID分配为0.这段代码是一团糟我认为