Android 从接触点获得最近的精灵

Android 从接触点获得最近的精灵,android,andengine,Android,Andengine,这就是我如何在屏幕上随机添加精灵,并通过另一个过于随机的函数移动它们。 现在我的问题是,当用户触摸屏幕时,如何从触摸点找到最近的精灵(在我的例子中是精子)。我有scene touchevent,我也可以找到两个精灵之间的距离,但我不知道如何比较它们,因为我没有列表或类似的实例 请帮帮我 @Override public Scene onCreateScene() { this.mEngine.registerUpdateHandler(new FPSLogger()); this

这就是我如何在屏幕上随机添加精灵,并通过另一个过于随机的函数移动它们。 现在我的问题是,当用户触摸屏幕时,如何从触摸点找到最近的精灵(在我的例子中是精子)。我有scene touchevent,我也可以找到两个精灵之间的距离,但我不知道如何比较它们,因为我没有列表或类似的实例

请帮帮我

@Override
public Scene onCreateScene() {
    this.mEngine.registerUpdateHandler(new FPSLogger());
    this.mScene = new Scene();
    this.mScene.setBackground(new Background(Color.BLUE));
    this.mScene.setOnSceneTouchListener(this);
    // ----------------------------------------------------------------
    createHandlerToAddSperms();
    // -----------------------------------------------------------------
    return this.mScene;
}


private void createHandlerToAddSperms() {
    // -------------------------------------------------
    mTimerClass = new TimerClass(0.7f, new TimerClass.ITimerCallback() {

        @Override
        public void onTick() {

            if (!isGameOver) {
                SpermSprite sperm;
                if (mRandom == null) {
                    mRandom = new Random();
                }
                switch (mRandom.nextInt(DOWN + 1)) {
                case MainActivity.LEFT:
                    sperm = addNewSpermToScreen(0, mRandom.nextInt(CAMERA_HEIGHT), true);
                    // sperm.setColor(Color.GREEN);

                    break;
                case MainActivity.RIGHT:
                    sperm = addNewSpermToScreen(CAMERA_WIDTH, mRandom.nextInt(CAMERA_HEIGHT), true);
                    // sperm.setColor(Color.WHITE);

                    break;

                case MainActivity.UP:
                    sperm = addNewSpermToScreen(mRandom.nextInt(CAMERA_WIDTH), 0, true);
                    // sperm.setColor(Color.BLUE);

                    break;
                case MainActivity.DOWN:
                    sperm = addNewSpermToScreen(mRandom.nextInt(CAMERA_WIDTH), CAMERA_HEIGHT, true);
                    // sperm.setColor(Color.CYAN);

                    break;

                default:
                    System.out.println("DEFAULT case==============================");
                    break;

                }

            } else {

                mScene.unregisterUpdateHandler(mTimerClass);
                System.out.println("UNREGISTER pTimerHandler =========================");

            }

        }
    });
    // -------------------------------------------------

    this.mScene.registerUpdateHandler(mTimerClass);

}

private SpermSprite addNewSpermToScreen(final float pX, final float pY, final boolean modifyPath) {
    this.spermCount++;
    Debug.d("spermCount: " + this.spermCount);

    final SpermSprite sperm;
    sperm = new SpermSprite(pX, pY, this.spermTextureRegion, mBufferObjectManager) {

        @Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
            // addWaterDropBlast(this.getX(), this.getY(), this);
            return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
        }
    };

    if (modifyPath) {
        addPathModifireToDrp(sperm);
    }

    this.mScene.attachChild(sperm);
    this.mScene.registerTouchArea(sperm);
    rotateSpirmTowardsCentre(sperm);

    return sperm;

}


@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
    final float touchX = pSceneTouchEvent.getX();
    final float touchY = pSceneTouchEvent.getY();

    switch (pSceneTouchEvent.getAction()) {
    case TouchEvent.ACTION_DOWN:
        // -----------------------------------------------------------
        break;

    case TouchEvent.ACTION_MOVE:

        break;
    case TouchEvent.ACTION_UP:
        break;

    }

    return true;
};

您没有任何方法来获取实体的所有精灵。所以您可以做一件事 将所有精灵添加到列表中。然后查找其他精灵与您的精灵之间的距离

内在预测; 整数指数

for(Sprite other: listOfsprites){
 distance(otherSpritePos, yourTargetPos);

  // compare all sprites in this way 
    finally you will get the index of a sprite in the list which having min distance


}  

distance(otherSpritePos, targetPos){

       int  distance  = Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2);
          if(distance< preDis){
          preDis = distance;

            // get list index of that sprite

    }
for(精灵其他:listOfsprites){
距离(其他SpritePos、您的TargetPos);
//以这种方式比较所有精灵
最后,您将获得列表中具有最小距离的精灵的索引
}  
距离(其他SpritePos、targetPos){
int距离=数学功率(x1-x2,2)+数学功率(y1-y2,2);
if(距离<预测值){
preDis=距离;
//获取该精灵的列表索引
}

你可以用这种方式实现逻辑

希望我的帖子可以帮助你实现逻辑我知道这种方法我认为会有更好的解决方案…仍然接受你的答案谢谢你的帮助