Re: [問題] urmap,googleMaps地圖的平移和縮放要怎 …
看板GameDesign (遊戲設計)作者littleshan (我要加入劍道社!)時間17年前 (2007/05/12 01:04)推噓1(1推 0噓 0→)留言1則, 1人參與討論串2/2 (看更多)
※ 引述《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
推
05/12 20:43, , 1F
05/12 20:43, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章