2016-12-12 3 views
0

PNGファイルから(600/448)の画面にレベル(1600/448)をレンダリングしようとしています。それはレンダリングしようとしますが、それは成功しません、私はそうする間にゲームのループを停止すると思う。そして、私はタイルがたくさんあるのでこれが起こっていると思いますが、どうやって周りを回ることができるのか分かりません。JavaがPNG画像からタイルをレンダリングするには時間がかかります

public void loadLevel(BufferedImage image) { 
    int width = image.getWidth(); 
    int height = image.getHeight(); 

    for (int xx = 0; xx < width; xx++) { //width = 1600 
     for (int yy = 0; yy < height; yy++) { //height = 448; 
      Color c = new Color(image.getRGB(xx,yy)); 
      int red = c.getRed(); 
      int green = c.getGreen(); 
      int blue = c.getBlue(); 

      if (red == 225 && blue == 225 & green == 225) { 
       objectHandler.add(new GrassRight(xx * 32, yy * 32, ObjectId.GrassRight)); 
      } else if (red == 129 && blue == 250 & green == 212) { 
       objectHandler.add(new Player(xx * 32, yy * 32, objectHandler, ObjectId.Player)); 
      } else if (red == 0 && blue == 0 && green == 0) { 
       objectHandler.add(new Dirt(xx * 32, yy * 32, ObjectId.Dirt)); 

      } else if (red == 144 && blue == 144 & green == 213) { 
       objectHandler.add(new Grass(xx * 32, yy * 32, ObjectId.Grass)); 

      } else if (red == 38 && blue == 56 & green == 50) { 
       objectHandler.add(new GrassLeft(xx * 32, yy * 32, ObjectId.GrassLeft)); 

      } else if (red == 62 && blue == 35 & green == 39) { 
       objectHandler.add(new SlideRight(xx * 32, yy * 32, ObjectId.SlideRight)); 

      } else if (red == 191 && blue == 12 & green == 54) { 
       objectHandler.add(new SlideLeft(xx * 32, yy * 32, ObjectId.SlideLeft)); 

      } else if (red == 127 && blue == 194 & green == 87) { 
       objectHandler.add(new DownSlideLeft(xx * 32, yy * 32, ObjectId.DownSlideLeft)); 

      } else if (red == 49 && blue == 146 & green == 27) { 
       objectHandler.add(new DownSlideRight(xx * 32, yy * 32, ObjectId.DownSlideRight)); 
      } 
     } 
    } 
} 


public void init() { 
    System.out.println("Loading..."); 
    LoadingHandler loadingHandler = new LoadingHandler(); 
    level = loadingHandler.loadImage("/Level1.png"); 
    objectHandler = new ObjectHandler(); 
    cameraHandler = new CameraHandler(0, 0); 
    this.addKeyListener(new KeyHandler(objectHandler)); 
    loadLevel(level); 
    System.out.println("Done!"); 
} 

public void render() { 
    BufferStrategy bs = this.getBufferStrategy(); 
    if (bs == null) { 
     this.createBufferStrategy(3); 
     return; 
    } 
    Graphics g = bs.getDrawGraphics(); 
    Graphics2D g2d = (Graphics2D) g; 
    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
    g2d.translate(cameraHandler.getX(), cameraHandler.getY()); 
    System.out.println("Rendering!"); 
    objectHandler.render(g); 
    System.out.println("Rendered!"); 
    g2d.translate(-cameraHandler.getX(), -cameraHandler.getY()); 
    g.dispose(); 
    bs.show(); 

} 

public class ObjectHandler { 
public LinkedList<ObjectManager> object = new LinkedList<>(); 

ObjectManager tempObject; 

public void tick() { 
    for (int i = 0; i < object.size(); i++) { 
     tempObject = object.get(i); 
     tempObject.tick(object); 
    } 
} 

public void render(Graphics g) { 
    for (int i = 0; i < object.size(); i++) { 
     tempObject = object.get(i); 
     tempObject.render(g); 
    } 
} 

public void add(ObjectManager object) { 
    this.object.add(object); 

} 

そして、それは、この出力を与える:

Loading... 
Done! 
Rendering! 

PNG:代わりに、各ピクセルのオブジェクトを作成する

enter image description here

+0

プロセスが完全に実行されたか、途中で停止しましたか? – user3437460

+0

@ user3437460実際には途中で停止しましたが、実際には「レンダリング」されませんでした – NattoShaw

+0

コードは完全ではありません...さまざまな問題を推測できます。 –

答えて

3

(すなわち716'800オブジェクトである)作成矩形領域ごとに1つのオブジェクト(15個のオブジェクト)。

UPDATE:クラスのObjectManagerで

二つのintフィールドを追加します。その後だけでなく、単一のピクセル(または32×32の正方形)の全体矩形を描画、幅と高さ。 PNGを使用してオブジェクトを初期化することはできますが、ピクセルごとに新しいオブジェクトを再作成しない、よりスマートなアルゴリズムを使用できます。

+0

私にリードを与えてくれたらいいですか?それをするつもりです – NattoShaw

+0

これらのオブジェクト(GrassRight、Player、SlideLeftなど)はどのようにレンダリングされますか? –

+0

GrassRightクラスでは、私はレンダリングメソッドを持っています:public void render(Graphics g){ g.setColor(Color.green); g.drawRect((int)x、(int)y、32、32); (グラフィックスg){ for(int i = 0; i NattoShaw