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

1

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

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

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

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

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

@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);
}
  • 0
    это пользовательский вид? Вы реализовали прокрутку с помощью scrollTo() / scrollBy() ? Вы можете просто добавить значения getScroll*() к экранным координатам.
Теги:
scroll
coordinates

1 ответ

2
Лучший ответ

Его довольно легко. Когда вы прокручиваете карту, у вас есть смещение. Если вы перейдете вправо (фон переместится влево), ваше смещение будет отрицательным. Допустим, у вас есть смещение по 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));
}
  • 0
    @WarrenFaith Можете ли вы сказать мне, как мозаичное изображение большого размера? моя фоновая карта 750х700
  • 0
    мне нужны координаты, потому что я разрабатываю игру, в которой у меня есть большая карта и объекты на ней. когда я прокручиваю карту, мне нужно, чтобы объекты двигались вместе в одной и той же позиции. я опубликовал свой код
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню