Dersleri okumak ve multiTouch ve Stackoverflow ile ilgili her soruya bakmak için sayısız saat geçirdim. Ama bunu nasıl doğru yapacağımı anlayamıyorum. Benim almak için bir döngü kullanın pointerId
, ben bunu yapan bir sürü insan görmüyorum ama onun biraz çalışma elde etmeyi başardı tek yolu.
Ekranımda biri hareket etmek, diğeri sprite dönümü ve atış açısını kontrol etmek için iki oyun çubuğu var, Monster Shooter'daki gibi. Her ikisi de iyi çalışıyor.
Benim sorunum Im çekim ile aynı anda benim sprite Taşı zaman, benim ki touchingPoint
benim hareket için ayarlandığında touchingPoint
beri, benim çekim x
ve y
daha üsttedir touchingPoint
(benim çekim moving-stick
, ekranın sol tarafında shooting-stick
sağ tarafta) , sprite hızlanır, bu sprite için hızda istenmeyen bir değişiklik yaratır.
bu şekilde sizin yardımınızla çözdüm! bu benzer bir sorunla karşılaşabilecek herkes içindir:
public void update(MotionEvent event) {
if (event == null && lastEvent == null) {
return;
} else if (event == null && lastEvent != null) {
event = lastEvent;
} else {
lastEvent = event;
}
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
int pid = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int x = (int) event.getX(pid);
int y = (int) event.getY(pid);
int index = event.getActionIndex();
int id = event.getPointerId(index);
String actionString = null;
switch (actionCode)
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
actionString = "DOWN";
try{
if(x > 0 && x < steeringxMesh + (joystick.get_joystickBg().getWidth() * 2)
&& y > yMesh - (joystick.get_joystickBg().getHeight()) && y < panel.getHeight()){
movingPoint.x = x;
movingPoint.y = y;
dragging = true;
draggingId = id;
}
else if(x > shootingxMesh - (joystick.get_joystickBg().getWidth()) && x < panel.getWidth()
&& y > yMesh - (joystick.get_joystickBg().getHeight()) && y < panel.getHeight()){
shootingPoint.x = x;
shootingPoint.y = y;
shooting=true;
shootingId=id;
}
}catch(Exception e){
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_OUTSIDE:
if(id == draggingId)
dragging = false;
if(id == shootingId)
shooting = false;
actionString = "UP";
break;
case MotionEvent.ACTION_MOVE:
for(index=0; index<event.getPointerCount(); index++) {
id=event.getPointerId(index);
int xx = (int) event.getX(index); //pro naming of variable
int yy = (int) event.getY(index);
if(dragging && id == draggingId) {
if(xx > 0 && xx < (steeringxMesh + joystick.get_joystickBg().getWidth() * 2)
&& yy > yMesh - (joystick.get_joystickBg().getHeight()) && yy < panel.getHeight()) {
movingPoint.x = xx;
movingPoint.y = yy;
}
else
dragging = false;
}
if(shooting && id == shootingId){
if(xx > shootingxMesh - (joystick.get_joystickBg().getWidth()) && xx < panel.getWidth()
&& yy > yMesh - (joystick.get_joystickBg().getHeight()) && yy < panel.getHeight()) {
shootingPoint.x = xx;
shootingPoint.y = yy;
}
else
shooting = false;
}
}
actionString = "MOVE";
break;
}
Log.d(TAG, "actionsString: " + actionString + ", pid: " + pid + ", x: " + x + ", y: " + y);
Yanlış yaptığımın mutlak kaybına uğramasaydım bu kadar kod göndermezdim. MultiTouching'in nasıl çalıştığını iyi anlayamıyorum.
temel movingPoint
olarak hem birinci hem de ikinci parmağım için değişir. Bir kutuya bağlarım, ancak bu kutunun içinde bir parmağımı tuttuğum sürece, ikinci parmağımın dokunduğu yere göre değerini değiştirir. Doğru yönde hareket eder ve hiçbir şey hata vermez, sorun hız değişimidir, neredeyse iki dokunma noktasını toplar gibi.