2012-09-02 17 views
5

Döşenmiş bir harita oluşturmayla ilgili yardıma ihtiyacım var, sadece resimlerle (fayans) bir harita yerine beyaz bir ekran alıyorum. Birisi bunun için yardımcı olabilir mi? BuradaKiremitli bir harita nasıl oluşturulur (Sadece beyaz ekrana ulaşıyorum) Java

World.java

package game.test.src; 

    import java.awt.Graphics; 
    import java.awt.Image; 
    import java.awt.Rectangle; 

    import javax.swing.ImageIcon; 

    public class World { 

private Rectangle[] blocks; 
private Image[] blockImg; 
private final int arrayNum = 500; 

//Block Images 
private Image BLOCK_GRASS, BLOCK_DIRT, BLOCK_STONE, BLOCK_SKY; 

private int x, y; 

public World(){ 
    BLOCK_GRASS = new ImageIcon("C:/Users/Pim/Desktop/2D game test/Game test 2/src/game/test/src/images/tile_grass").getImage(); 
    BLOCK_DIRT = new ImageIcon("C:/Users/Pim/Desktop/2D game test/Game test 2/src/game/test/src/images/tile_dirt").getImage(); 
    BLOCK_STONE = new ImageIcon("C:/Users/Pim/Desktop/2D game test/Game test 2/src/game/test/src/images/tile_stonek").getImage(); 
    BLOCK_SKY = new ImageIcon("C:/Users/Pim/Desktop/2D game test/Game test 2/src/game/test/src/images/tile_sky").getImage(); 
    blocks = new Rectangle[500]; 
    blockImg = new Image[500]; 

    loadArrays(); 
} 

private void loadArrays() 
{ 
    for(int i = 0; i < arrayNum; i++) 
    { 
     if(x >= 500){ 
      x = 0; 
      y += 20; 
     } 
     if(i >= 0 && i < 100) 
     { 
      blockImg[i] = BLOCK_SKY; 
      blocks[i] = new Rectangle(x, y, 20, 20); 
     } 
     if(i >= 100 && i < 125) 
     { 
      blockImg[i] = BLOCK_GRASS; 
      blocks[i] = new Rectangle(x, y, 20, 20); 
     } 
     if(i >= 125 && i < 225) 
     { 
      blockImg[i] = BLOCK_DIRT; 
      blocks[i] = new Rectangle(x, y, 20, 20); 
     } 
     if(i >= 225 && i < 500) 
     { 
      blockImg[i] = BLOCK_STONE; 
      blocks[i] = new Rectangle(x, y, 20, 20); 
     } 
     x += 20; 

    } 

} 

public void draw(Graphics g) 
{ 
    for(int i = 0; i< arrayNum; i++){ 
     g.drawImage(blockImg[i], blocks[i].x, blocks[i].y, null); 
    } 
} 
} 

Ve yardım için

teşekkürler GamePanel.java

package game.test.src; 

import java.awt.*; 
import java.awt.event.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JPanel; 

public class GamePanel extends JPanel implements Runnable { 
    //Double buffering 
    private Image dbImage; 
    private Graphics dbg; 
    //JPanel variables 
    static final int GWIDTH = 500, GHEIGHT = 400; 
    static final Dimension gameDim = new Dimension(GWIDTH, GHEIGHT); 
    //Game variables 
    private Thread game; 
    private volatile boolean running = false; 
    //Game Objects 
    World world; 

    public GamePanel(){ 
     world = new World(); 

     setPreferredSize(gameDim); 
     setBackground(Color.WHITE); 
     setFocusable(true); 
     requestFocus(); 
     //Handle all key inputs from user 
     addKeyListener(new KeyAdapter(){ 
      @Override 
      public void keyPressed(KeyEvent e){ 

      } 
      @Override 
      public void keyReleased(KeyEvent e){ 

      } 
      @Override 
      public void keyTyped(KeyEvent e){ 

      } 
     }); 

    } 

    public void run(){ 
     while(running){ 
      gameUpdate(); 
      gameRender(); 
      paintScreen(); 

     } 
    } 

    private void gameUpdate(){ 
     if(running && game != null){ 

     } 
    } 

    private void gameRender(){ 
     if(dbImage == null){ // Create the buffer 
      dbImage = createImage(GWIDTH, GHEIGHT); 
      if(dbImage == null){ 
       System.err.println("dbImage is still null!"); 
       return; 
      }else{ 
       dbg = dbImage.getGraphics(); 
      } 
     } 
     //Clear the screen 
     dbg.setColor(Color.WHITE); 
     dbg.fillRect(0, 0, GWIDTH, GHEIGHT); 
     //Draw Game elements 
     draw(dbg); 
    } 

    /* Draw all game content in this method */ 
    public void draw(Graphics g){ 
     world.draw(g); 
    } 

    private void paintScreen(){ 
     Graphics g; 
     try{ 
      g = this.getGraphics(); 
      if(dbImage != null && g != null){ 
       g.drawImage(dbImage, 0, 0, null); 
      } 
      Toolkit.getDefaultToolkit().sync(); //For some operating systems 
      g.dispose(); 
     }catch(Exception e){ 
      System.err.println(e); 
     } 
    } 

    public void addNotify(){ 
     super.addNotify(); 
     startGame(); 
    } 

    private void startGame(){ 
     if(game == null || !running){ 
      game = new Thread(this); 
      game.start(); 
      running = true; 
     } 
    } 

    public void stopGame(){ 
     if(running){ 
      running = false; 
     } 
    } 
    } 

ve Main.java

package game.test.src; 

import javax.swing.JFrame; 

public class Main extends JFrame 
{ 
    GamePanel gp; 

    public Main() 
    { 
     gp = new GamePanel(); 
     setSize(500, 400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
     setResizable(false); 
     add(gp); 
    } 



    public static void main(String[] args) 
    { 
     Main m = new Main(); 
    } 

} 
olduğunu!

p.s. ingilizcem için özür dilerim Hollandalıyım.

+0

deneyin kodunuzu değiştirdiyseniz bu kadar garip yolları kullanıyor musunuz? –

+0

Bana daha iyi bir yol örneği verebilir misin? (Bunun nasıl çalıştığını bilmiyordum ...) –

+0

Grafik bağlamını almak için 'getGraphics()' bileşenlerini çağırıyor gibi görünüyorsunuz ve bunu yapmamalısınız. Öğreticiniz bunu yapmanı söyledi mi? Eğer öyleyse, lütfen bize bir bağlantı gösterin, çünkü bu çok alışılmamış bir şey. Ne öğretici ya da kitap kullandığınızı merak etmeliyim. –

cevap

4

Biraz

import java.awt.*; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.*; 

public class World { 

    private Rectangle[] blocks; 
    private Image[] blockImg; 
    private final int arrayNum = 500; 

    //Block Images 
    private Image BLOCK_GRASS, BLOCK_DIRT, BLOCK_STONE, BLOCK_SKY; 

    private int x, y; 

    public World(){ 
    BLOCK_GRASS = new ImageIcon(Frame1.class.getResource("images/openFile.gif")).getImage(); 
    BLOCK_DIRT = new ImageIcon(Frame1.class.getResource("images/openFile.gif")).getImage(); 
    BLOCK_STONE = new ImageIcon(Frame1.class.getResource("images/openFile.gif")).getImage(); 
    BLOCK_SKY = new ImageIcon(Frame1.class.getResource("images/openFile.gif")).getImage(); 
    blocks = new Rectangle[500]; 
    blockImg = new Image[500]; 

    loadArrays(); 
    } 

    private void loadArrays() 
    { 
    for(int i = 0; i < arrayNum; i++) 
    { 
     if(x >= 500){ 
     x = 0; 
     y += 20; 
     } 
     if(i >= 0 && i < 100) 
     { 
     blockImg[i] = BLOCK_SKY; 
     blocks[i] = new Rectangle(x, y, 20, 20); 
     } 
     if(i >= 100 && i < 125) 
     { 
     blockImg[i] = BLOCK_GRASS; 
     blocks[i] = new Rectangle(x, y, 20, 20); 
     } 
     if(i >= 125 && i < 225) 
     { 
     blockImg[i] = BLOCK_DIRT; 
     blocks[i] = new Rectangle(x, y, 20, 20); 
     } 
     if(i >= 225 && i < 500) 
     { 
     blockImg[i] = BLOCK_STONE; 
     blocks[i] = new Rectangle(x, y, 20, 20); 
     } 
     x += 20; 

    } 

    } 

    public void draw(Graphics g) 
    { 
    for(int i = 0; i< arrayNum; i++){ 
     g.drawImage(blockImg[i], blocks[i].x, blocks[i].y, null); 
    } 
    } 
} 

class GamePanel extends JPanel implements Runnable { 
    //Double buffering 
    private Image dbImage; 
    private Graphics dbg; 
    //JPanel variables 
    static final int GWIDTH = 500, GHEIGHT = 400; 
    static final Dimension gameDim = new Dimension(GWIDTH, GHEIGHT); 
    //Game variables 
    private Thread game; 
    private volatile boolean running = false; 
    //Game Objects 
    World world; 

    public GamePanel(){ 
    world = new World(); 

    setPreferredSize(gameDim); 
    setBackground(Color.WHITE); 
    setFocusable(true); 
    requestFocus(); 
    //Handle all key inputs from user 
    addKeyListener(new KeyAdapter(){ 
     @Override 
     public void keyPressed(KeyEvent e){ 

     } 
     @Override 
     public void keyReleased(KeyEvent e){ 

     } 
     @Override 
     public void keyTyped(KeyEvent e){ 

     } 
    }); 

    } 

    public void run(){ 
    while(running){ 
     gameUpdate(); 
//  gameRender(); 
//  paintScreen(); 
     repaint(); 

    } 
    } 

    private void gameUpdate(){ 
    if(running && game != null){ 

    } 
    } 

    private void gameRender(){ 
    if(dbImage == null){ // Create the buffer 
     dbImage = createImage(GWIDTH, GHEIGHT); 
     if(dbImage == null){ 
     System.err.println("dbImage is still null!"); 
     return; 
     }else{ 
     dbg = dbImage.getGraphics(); 
     } 
    } 
    //Clear the screen 
    dbg.setColor(Color.WHITE); 
    dbg.fillRect(0, 0, GWIDTH, GHEIGHT); 
    //Draw Game elements 
    draw(dbg); 
    } 

    /* Draw all game content in this method */ 
    public void draw(Graphics g){ 
    world.draw(g); 
    } 
    public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    gameRender(); 
    paintScreen(g); 
    } 
    private void paintScreen(Graphics g){ 
    try{ 
//  g = this.getGraphics(); 
     if(dbImage != null && g != null){ 
     g.drawImage(dbImage, 0, 0, null); 
     } 
     Toolkit.getDefaultToolkit().sync(); //For some operating systems 
//  g.dispose(); 
    }catch(Exception e){ 
     System.err.println(e); 
    } 
    } 

    public void addNotify(){ 
    super.addNotify(); 
    startGame(); 
    } 

    private void startGame(){ 
    if(game == null || !running){ 
     game = new Thread(this); 
     game.start(); 
     running = true; 
    } 
    } 

    public void stopGame(){ 
    if(running){ 
     running = false; 
    } 
    } 
} 
class Main extends JFrame 
{ 
    GamePanel gp; 

    public Main() 
    { 
    gp = new GamePanel(); 
    setSize(500, 400); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    add(gp); 
    setResizable(false); 
    setVisible(true); 
    } 



    public static void main(String[] args) 
    { 
    Main m = new Main(); 
    } 

} 
+0

Ayrıca bu [örnek] 'e de bakınız (http://stackoverflow.com/a/11556441/230513). – trashgod

+0

@trashgod İyi görünümlü kod, teşekkürler. –