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

时间:2014-03-06 11:25:38

标签: android andengine

这就是我在屏幕上随机添加精灵并通过另一个随机函数移动精灵的方法。   现在我的问题是当用户触摸屏幕时,如何从触摸点找到最接近的精灵(在我的情况下是精子)。我有场景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;
};

1 个答案:

答案 0 :(得分:0)

你没有任何方法可以获得Entity的所有精灵。所以你可以做一件事  将所有精灵添加到列表中。然后找到其他精灵与精灵之间的距离。

int preDis; int index;

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

    }

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