2012-10-23 6 views
0

지도를 무한대로 만들고 싶습니다. 그러나 일부 부분에 들어갔을 때 그것은 단지 검은 색이어서 propraly를 렌더링하지 않습니다. 여기 Screen.java와 Game.java의 코드가있다. Screen.java : (내가 문제에서 오는 생각)지도가 무한하지 않습니다.

package com.vipgamming.Frytree.graphics; 

import java.util.Random; 

public class Screen { 

private int width, height; 
public int[] pixels; 
public final int MAP_SIZE = 128; 
public final int MAP_SIZE_MASK = MAP_SIZE -1; 
public int[] tiles = new int [MAP_SIZE*MAP_SIZE]; 

private Random random = new Random(); 

public Screen(int width, int height) { 
    this.width = width; 
    this.height = height; 
    pixels = new int[width * height]; 

    for (int i = 0; i < MAP_SIZE + MAP_SIZE; i++) { 
     tiles[i] = random.nextInt (0xffffff); 
    } 
} 

public void clear() { 
    for (int i = 0; i < pixels.length; i++) { 
     pixels[i] = 0; 
    } 
} 

public void render(int xOffset, int yOffset) { 
    for (int y = 0; y < height; y++) { 
     int yy = y+yOffset; 
     //if (yy < 0 || yy >= height) break; 
     for (int x = 0; x < width; x++) { 
      int xx = x+xOffset; 
      //if (xx < 0 || xx >= width) break; 
      int tileIndex = ((xx >> 4) & MAP_SIZE_MASK) + ((yy >> 4) & MAP_SIZE_MASK) * 8; 
      pixels[x + y * width] = tiles[tileIndex]; 
      } 
     } 
    } 

} 

Game.java는

package com.vipgamming.Frytree; 

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.image.BufferStrategy; 
import java.awt.image.BufferedImage; 
import java.awt.image.DataBufferInt; 

import javax.swing.JFrame; 

import com.vipgamming.Frytree.graphics.Screen; 
import com.vipgamming.Frytree.input.Keyboard; 

public class Game extends Canvas implements Runnable { 

private static final long serialVersionUID = 1L; 
public static int width = 300; 
public static int height = width /16 * 10; 
public static int scale = 3; 
public static String title = "FryTree"; 

private Thread thread; 
private JFrame frame; 
private Keyboard key; 
private boolean running = false; 

private Screen screen; 

private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
private int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData(); 

public Game() { 
    Dimension size = new Dimension(width * scale, height * scale); 
    setPreferredSize(size); 

    screen = new Screen(width, height); 
    frame = new JFrame(); 
    key = new Keyboard(); 

    addKeyListener(key); 

} 

public synchronized void start() { 
    running = true; 
    thread = new Thread(this, "Display"); 
    thread.start(); 
} 

public synchronized void stop() { 
    running = false; 
    try { 
     thread.join(); 
    }catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

public void run() { 
    long lastTime = System.nanoTime(); 
    long timer = System.currentTimeMillis(); 
    final double ns = 1000000000.0/60.0; 
    double delta = 0; 
    int frames = 0; 
    int updates = 0; 
    while (running) { 
      long now = System.nanoTime(); 
      delta += (now-lastTime)/ns; 
      lastTime = now; 
      while (delta >= 1) { 
       update(); 
       updates++; 
       delta--; 
      } 
      render(); 
      frames++; 

      if (System.currentTimeMillis() - timer > 1000) { 
       timer += 1000; 
       System.out.println(updates + "ups, " + frames +" fps"); 
       frame.setTitle(title + " | " + updates + "ups, " + frames +" fps"); 
       updates = 0; 
       frames = 0; 
      } 
     } 
    stop(); 
} 
int x=0, y=0; 
public void update() { 
    key.update(); 
    if (key.up) y--; 
    if (key.down) y++; 
    if (key.left) x--; 
    if (key.right) x++; 
    } 

public void render() { 
    BufferStrategy bs = getBufferStrategy(); 
    if (bs == null) { 
     createBufferStrategy(3); 
     return; 
    } 
    screen.clear(); 
    screen.render(x, y); 

    for (int i = 0; i < pixels.length; i++) { 
     pixels[i] = screen.pixels[i]; 
    } 

    Graphics g = bs.getDrawGraphics(); 
    g.drawImage(image, 0, 0, getWidth(), getHeight(), null); 
    g.dispose(); 
    bs.show(); 
} 

    public static void main(String [] args) { 
     Game game = new Game(); 
     game.frame.setResizable(false); 
     game.frame.setTitle(game.title); 
     game.frame.add(game); 
     game.frame.pack(); 
     game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     game.frame.setLocationRelativeTo(null); 
     game.frame.setVisible(true); 

     game.start(); 
    } 
} 

이 오류를 제공하지 않습니다.

답변

0

생성자의 for 루프에서 MAP_SIZEMAP_SIZE으로 곱하고 싶다고 덧붙입니다.

+0

도움 주셔서 감사합니다. – Malta108

관련 문제