Re: [問題] urmap,googleMaps地圖的平移和縮放要怎 …

看板GameDesign (遊戲設計)作者 (我要加入劍道社!)時間17年前 (2007/05/12 01:04), 編輯推噓1(100)
留言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
文章代碼(AID): #16HA89I_ (GameDesign)
文章代碼(AID): #16HA89I_ (GameDesign)