gpt4 book ai didi

android - 获取触摸事件相对于可滚动 map 的坐标

转载 作者:行者123 更新时间:2023-11-29 22:27:08 25 4
gpt4 key购买 nike

有没有办法在可滚动 map 上获取触摸事件的坐标?

意思是当我触摸屏幕上的某个点时,getX()getY() 返回各自的值,然后当我滚动 map 时,返回坐标应该是相对于 map ,而不是屏幕。
例如。我有一个 750x750 的背景 map ,我的设备屏幕尺寸是 480x800。
当我第一次触摸时,说返回的坐标是 (100, 200)。现在,当我滚动 map 并触摸其他地方时,我得到的坐标为 200、200。
我想获得相对于 map 而不是屏幕的坐标。

很长一段时间以来,我一直在努力解决这个问题,但在网上和其他网站上搜索都无济于事。

请帮忙。
提前致谢
\m/

我需要坐标因为我正在开发一款游戏,其中我有一张大 map 和放置在上面的对象。当我滚动 map 时,我需要对象在同一位置一起移动。这是我的代码:

@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);
}

最佳答案

这很容易。当你滚动你的 map 时,你有一个偏移量。如果向右滚动(背景将向左移动),您的偏移量将为负数。比方说,您在 x 上的偏移量为 -50,然后单击屏幕坐标 100,您只需进行数学运算即可:

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

只看 X 坐标,对于 Y 它应该是相同的。

我写了一个tutorial about a map of tiles and scrolling over it .或许您也可以看看。

伪代码!

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));
}

关于android - 获取触摸事件相对于可滚动 map 的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5551809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com