Java OnTouchEvent:我想在屏幕上用另一个手指移动时识别触摸
我正在努力开发我自己的游戏。但是我对onTouchEvent方法有一个问题。在显示我的代码之前,没有什么解释。我想用手指控制飞行。它应该一直跟着我的手指。为此,我实现了MotionEvent.ACTION\u MOVE案例。航班只能在屏幕左侧移动。当我触摸屏幕右侧时,它应该会射出一颗子弹。而且应该可以同时飞行和拍摄。这是我的密码:Java OnTouchEvent:我想在屏幕上用另一个手指移动时识别触摸,java,android,touch-event,Java,Android,Touch Event,我正在努力开发我自己的游戏。但是我对onTouchEvent方法有一个问题。在显示我的代码之前,没有什么解释。我想用手指控制飞行。它应该一直跟着我的手指。为此,我实现了MotionEvent.ACTION\u MOVE案例。航班只能在屏幕左侧移动。当我触摸屏幕右侧时,它应该会射出一颗子弹。而且应该可以同时飞行和拍摄。这是我的密码: public boolean onTouchEvent(MotionEvent event) { int maskedaction= event.getAc
public boolean onTouchEvent(MotionEvent event) {
int maskedaction= event.getActionMasked();
switch (maskedaction) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
if (event.getX() > screenX / 2 && flight.toShoot == 0) {
flight.toShoot++;
}
break;
case MotionEvent.ACTION_MOVE: {
if (event.getX() < screenX / 2 - 100) {
flight.x = (int) event.getX() - 100;
flight.y = (int) event.getY() - 50;
}
break;
}
}
return true;
}
public boolean onTouchEvent(运动事件){
int maskedaction=event.getActionMasked();
开关(掩蔽){
case MotionEvent.ACTION\u DOWN:
case MotionEvent.ACTION\u指针\u向下:
if(event.getX()>screenX/2&&flight.toshot==0){
flight.toshot++;
}
打破
case MotionEvent.ACTION\u移动:{
if(event.getX()
这就是代码。当我触摸屏幕的左半部分时,我可以驾驶飞机四处飞行。当我触到右侧时,我可以射击。但我不能同时做。我想先触到左半边,然后飞过来。通过点击右侧,当我在左侧移动手指的同时,它应该会射出一颗子弹
我发现,当我用一个手指同时点击两侧时,飞机就会射出一颗子弹。如果我现在松开右手手指(当它接触屏幕时射出的手指),我可以四处飞行,而当我四处飞行时,我可以同时射出 您可以通过检测ID来检测您的触摸 您可以这样做:
int leftSideId = 0;
int rightSideId = 1;
public boolean onTouchEvent(MotionEvent event) {
int maskedaction= event.getActionMasked();
// Get the pointer ID
int mActivePointerId = event.getPointerId(0);
switch (maskedaction) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
if (event.getX() > screenX / 2) {
rightSideId = mActivePointerId;
if(flight.toShoot == 0){
flight.toShoot++;
}
}else{
leftSideId = mActivePointerId;
}
break;
case MotionEvent.ACTION_MOVE: {
if (event.getX() < screenX / 2 - 100) {
if (mActivePointerId == leftSideId) {
flight.x = (int) event.getX() - 100;
flight.y = (int) event.getY() - 50;
}
}
break;
}
}
return true;
}
int leftSideId=0;
int rightSideId=1;
公共布尔onTouchEvent(运动事件){
int maskedaction=event.getActionMasked();
//获取指针ID
int mActivePointerId=event.getPointerId(0);
开关(掩蔽){
case MotionEvent.ACTION\u DOWN:
case MotionEvent.ACTION\u指针\u向下:
if(event.getX()>screenX/2){
rightSideId=mActivePointerId;
如果(flight.toshot==0){
flight.toshot++;
}
}否则{
leftSideId=MacTivePointId;
}
打破
case MotionEvent.ACTION\u移动:{
if(event.getX()
所以我自己找到了一个解决方案
public boolean onTouchEvent(MotionEvent event){
int amount=event.getPointerCount();
for (int i=0; i<amount; i++) {
float x = event.getX(i);
float y = event.getY(i);
if (x>screenX/2 && flight.toShoot==0){
flight.toShoot++;
}
if (x<screenX/2 -100 && flyingenabled)
{
flight.x = (int) x - 100;
flight.y = (int) y - 50;
}
}
return true;
}
public boolean onTouchEvent(运动事件){
int amount=event.getPointerCount();
对于(int i=0;iscreenX/2&&flight.toshot==0){
flight.toshot++;
}
如果(xIt)不能解决问题。我已经尝试了代码,但问题仍然存在。现在我无法做我发现的事情。因此,当我同时触摸两个部分时。