как сделать так, чтобы объект всегда перемещался по кратчайшему расстоянию к/к точке, за которой он уже следует

а. У меня есть объект. б. когда пользователь прикасается к экрану, он облегчит/поднимет координату касания пользователя. в. если пользователь проведет пальцем, то объект будет следовать по этому пути, просто проходя путь, созданный входными данными из события движения ACTION_MOVE.

как мне сделать так, чтобы объект занимал кратчайшее расстояние до координат касания пользователей, а не следовал точному пути, который они создают?

В конце концов, объект должен догнать координату касания пользователя.

public Scene onLoadScene() {
    this.getEngine().registerUpdateHandler(new FPSLogger());

    final Scene scene = new Scene();
    scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));

    final int x = (CAMERA_WIDTH - this.mFaceTextureRegion.getWidth()) / 2;
    final int y = (CAMERA_HEIGHT - this.mFaceTextureRegion.getHeight()) / 2;
    final Sprite face = new Sprite(x, y, this.mFaceTextureRegion);
    scene.registerTouchArea(face);
    scene.attachChild(face);
    //face.setPosition(134, 200);
    //face.registerEntityModifier(new MoveModifier(500, x, 100, y, 200, EaseQuadIn.getInstance())); 

    scene.setOnSceneTouchListener(new IOnSceneTouchListener() {

        @Override
        public boolean onSceneTouchEvent(Scene pScene,TouchEvent pSceneTouchEvent) {
            int facePosX = (int) (pSceneTouchEvent.getX() - face.getWidth() / 2);
            int facePosY = (int) (pSceneTouchEvent.getY() - face.getHeight() / 2);

            if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_MOVE)
            {
                face.registerEntityModifier(new MoveModifier(1, face.getX(), facePosX,face.getY(), facePosY, EaseQuadIn.getInstance()));                
               }
            return true;            
            }
    });


    scene.setTouchAreaBindingEnabled(true);
    return scene;
}

person joacampb    schedule 20.02.2012    source источник


Ответы (1)


Я бы посоветовал вам взять MotionEvent.ACTION_DOWN и MotionEvent.ACTION_UP, получить начальные и конечные координаты и соответствующим образом переместить объект.

Таким образом, ваша начальная точка будет на ACTION_DOWN, а конечная точка — на ACTION_UP.

person jeet    schedule 20.02.2012