作者littleshan (我要加入剑道社!)
看板GameDesign
标题Re: [问题] urmap,googleMaps地图的平移和缩放要怎 …
时间Sat May 12 01:04:06 2007
※ 引述《eliang ()》之铭言:
: class Canvas extends JPanel {
: // other code...
: @override
: void paint(Graphics g) {
: super.paint(g);
: Graphics2D g2d = (Graphics2D) g;
: // pan and zoom
: // panX, panY 是目前的平移量
: // zoomX, zoomY 是目前的缩放量
: g2d.translate(panX, panY);
: g2d.scale(zoomX, -zoomY); // 使用 -zoomY 是因为要把 Y 轴方向倒过来
: // draw something
: g2d.drawLine(0, 0, 10, 10);
: g2d.drawOval(-10, -10, 20, 20);
: }
: }
老实说我不确定 Java2D 中的 transform 是怎麽做的
试了一回儿後感觉和 OpenGL 似乎是相反的
首先确定一下流程
因为你的缩放中心固定在可视范围的中心
所以应该先移至缩放中心 -> 缩放 -> 移回来
不过你还把 Y 轴反转过
所以「移回来」时 Y 轴要乘上 -1
g2d.translate(250, 250);
g2d.scale(zoomX, -zoomY);
g2d.translate(-250, 250);
最後是平移
g2d.translate(panX, -panY); // Y 轴被反转过
不过你在接滑鼠事件的地方也应该要考虑目前的缩放比
使用者拉动 1px 在缩放前与缩放後所代表的距离并不同
public void pan(double amountX, double amountY)
{
panX += amountX / zoomX;
panY += amountY / zoomY;
}
这样应该就是你要的结果了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.3.35
1F:推 eliang:谢谢!! 05/12 20:43