2012-01-07 7 views
0

私は都市を上から見下ろしているゲーム(一種のCityVilleベース)を作っています。私は世界をドラッグして地図のさまざまな部分を見ることができるようにしたいと思います。事前に世界をドラッグできるシステムを実装するにはどうすればよいですか?

package com.cgp.buildtown; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionListener; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JPanel; 

public class Game extends JPanel implements Runnable, MouseMotionListener { 
    private static final long serialVersionUID = 1L; 
    private BufferedImage banner; 
    private String chars = " `[email protected]#4$5%6^7&8*9(0)-_=+qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:'\"zZxXcCvVbBnNmM,<.>/?"; 
    public String cityName; 
    private int[] offset; 
    public Thread thread; 
    private int totalOffset = 0; 
    private boolean[][] townAreas = new boolean[15][15]; 

    public Game() { 
     super(); 
     setBackground(new Color(69, 139, 0)); 
     loadImages(); 
     townAreas[8][8] = true; 
     townAreas[0][1] = true; 
    } 

    @Override 
    public void addNotify() { 
     super.addNotify(); 
     thread = new Thread(this); 
    } 

    void findOffset() { 
     offset = new int[cityName.length()]; 
     for (int i = 0; i < cityName.length(); i++) { 
      int ch = chars.indexOf(cityName.charAt(i)); 
      if (ch < 0) 
       continue; 
      if (isShort(ch)) { 
       for (int j = i + 1; j < offset.length; j++) { 
        offset[j] += 25; 
       } 
       totalOffset += 25; 
      } 
     } 
    } 

    private boolean isShort(int ch) { 
     if (ch == 0 || ch == 1 || ch == 4 || ch == 14 || ch == 20 || ch == 22 || ch == 41 || ch == 42 || ch == 47 || ch == 48 || ch == 49 || ch == 50 || ch == 51 || ch == 52 || ch == 65 || ch == 69 || ch == 71 || ch == 72 || ch == 73 || ch == 74 || ch == 89 || ch == 91 || ch == 93) 
      return true; 
     else 
      return false; 
    } 

    private void loadImages() { 
     try { 
      banner = ImageIO.read(new File("res/banner.png")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 

    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 

    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(new Color(118, 238, 0)); 

     for (int i = 0; i < 15; i++) { 
      for (int j = 0; j < 15; j++) { 
       if (townAreas[i][j]) { 
        g.fillRect(j * 400, i * 400, 400, 400); 
       } 
      } 
     } 

     int length = (cityName.length() * 45) - totalOffset; 
     int x = 400 - (length/2); 
     for (int k = 0; k < cityName.length(); k++) { 
      int ch = chars.indexOf(cityName.charAt(k)); 
      if (ch < 0) 
       continue; 
      g.drawImage(banner, (x + (k * 45)) - offset[k], 0, ((x + (k * 45)) + 45) - offset[k], 45, ch * 45, 0, (ch * 45) + 45, 45, null); 
     } 
     g.drawImage(banner, x - 15, 0, x, 45, 4276, 0, 4290, 45, null); 
     g.drawImage(banner, x + length, 0, x + length + 15, 45, 4291, 0, 4305, 45, null); 
    } 

    @Override 
    public void run() { 
     while (true) { 
      repaint(); 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

ありがとう:

は、ここに私のコードです!

+2

これは具体的な質問ではありません。これのどの部分、具体的にはあなたが問題を抱えていますか? –

+0

世界をドラッグできる場所(つまり、MouseMotionListeners)にシステムを配置します。私はそれをするためにさまざまな方法を試しましたが、どれも成功していません。 – Cg2916

+0

多分そのコードレビュースタック交換サイトを試してみてください。 – dotjoe

答えて

0

あなたが望む効果の用語は「滑りやすいマップ」と呼ばれると思います。これは、Googleマップに表示されるのと同じ種類のユーザーエクスペリエンスです。

Webブラウザにこのようなことをする例はたくさんありますが、いくつかのJQueryプラグインもあります。 Java2Dでそれを行う - あなたはGoogleの周りにする必要があります。

私たちは、暗闇の中で刺すのを助ける人々のために、より具体的な情報が必要です。

+0

これを見てみましょう。それはまさに私が欲しいものです。 – Cg2916

関連する問題