Получение координат на сенсорном событии относительно прокручиваемой карты - PullRequest
1 голос
/ 05 апреля 2011

Есть ли способ получить координаты события касания на прокручиваемой карте?

Значение, когда я касаюсь одной точки на экране, getX() и getY() возвращают соответствующие значения, а затемкогда я прокручиваю карту, возвращаемые координаты должны относиться к карте, а не к экрану.
Например.У меня есть фоновая карта 750x750, и размер экрана моего устройства составляет 480x800.
при первом касании говорят, что возвращенные координаты (100, 200).теперь, когда я прокручиваю карту и касаюсь где-то еще, я получаю координаты 200, 200.
Я хочу получить координаты относительно карты, а не экрана.

Я давно пытался это выяснить и тщетно прочесывал сеть и другие сайты.

, пожалуйста, помогите.
заранее спасибо
\ m /

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

@Override
public boolean onTouchEvent(MotionEvent ev) {

    switch (ev.getAction()) {

    case MotionEvent.ACTION_DOWN:
         touchStart.set(ev.getX(), ev.getY());
     x = ev.getX();
     y = ev.getY();
        break;
    case MotionEvent.ACTION_MOVE:
        newX = ev.getX() - touchStart.x + prevPicStart.x;
        newY = ev.getY() - touchStart.y + prevPicStart.y;
        if ((newX <= 0 && newX > 0 - mBG.getWidth() + Craz.DISP_WIDTH)) {
            picStart.x = newX;
          }
        if ((newY <= 0 && newY > 0 - mBG.getHeight() + Craz.DISP_HEIGHT)) {
            picStart.y = newY;

        }
        invalidate();
        break;

    case MotionEvent.ACTION_UP:

        prevPicStart.x = picStart.x;
        prevPicStart.y = picStart.y;

        break;
    }
    return true;
}

@Override
protected void onDraw(Canvas canvas) {
    Paint paint = new Paint();
    canvas.drawBitmap(mBG, picStart.x, picStart.y, paint);

    canvas.translate(picStart.x, picStart.y);

    mBDoor.draw(canvas);
}

1 Ответ

2 голосов
/ 05 апреля 2011

Это довольно легко.Когда вы прокручиваете свою карту, у вас есть смещение.Если вы прокрутите вправо (фон переместится влево), ваше смещение будет отрицательным.Допустим, у вас есть смещение по x -50, и вы нажимаете экранные координаты 100, вы просто делаете математические вычисления:

mapCoordX = screenX - offsetX; // makes: 100 - (-50) = 150

, просто глядя на координату X, для Y она должна быть такой же.

Я написал учебник о карте тайлов и прокрутке по ней .Может быть, вы тоже посмотрите на это.

Псевдокод!

for (int id = 0; id < mapSize; id++) {
  Tile tile = new Tile(id);
  startX = id * tileWidth;
  startY = id % rowLenght + id / rowLenght;
  tile.setBackground(createCroppedBitmap(background, startX, startY));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...