2013-04-29 63 views
1

我正在为我的第一个学校项目的java游戏工作,并且在基于数组中的信息绘制图形时遇到了一些问题。Java:从数组中绘制图形

我基本上试图做的是创建一个2D数组(矩阵),它将存储有关玩家可以移动的世界的所有信息。所以数组中的一些元素将包含墙,其他开放空间供玩家在移动,等等...

我有我的工作,从这个示例代码:

/** 
* 
* @author Rasztemberg 
*/ 
package simpleGame; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import javax.swing.JPanel; 


/** 
* GameBoard is a part of JPanel. 
* It has a Graphical Object {@link Graphics} 
* that can be used to render shapes etc. Pass it's reference to any object you 
* want to display in the gameBoard panel. 
*/ 


public class GameBoard extends JPanel implements KeyListener{ 



Player player; 
Player enemy; 

public GameBoard(){ 

    // SETUP PLAYER ON THE BOARD; 
    int xPos = 0; 
    int yPos = 0; 
    int width = 20; 
    int height = 20; 
    Color playerC = Color.BLUE; 

    player = new Player(xPos, yPos, width, height, playerC); 

    // SETUP ENEMY ON THE BOARD; 
    enemy = new Player(100, 100, width, height, Color.RED); 

    addKeyListener(this); 
} 


/* 
* 
* JPanel function to display all gameBoard object graphics. 
*/ 

@Override 
public void paint(Graphics g){ 
    super.paint(g); // Call it's parent for proper rendering. 

    player.display(g); 
    enemy.display(g); 
} 


@Override 
public void keyTyped(KeyEvent e) {} 

@Override 
public void keyPressed(KeyEvent e) { 

    int keyCode = e.getKeyCode(); 
    if (keyCode == KeyEvent.VK_LEFT) { 
     player.moveLeft(); 
    } 

    if (keyCode == KeyEvent.VK_RIGHT) { 
     player.moveRight(); 
    } 

    if (keyCode == KeyEvent.VK_DOWN) { 
     player.moveDown(); 
    } 

    if (keyCode == KeyEvent.VK_UP) { 
     player.moveUp(); 
    } 
} 

@Override 
public void keyReleased(KeyEvent e) {} 


/** 
* Set's focus on the panel so key events are catch. 
*/ 

public boolean isFocusTraversable() { 
    return true; 
} 

}

而且,

/** 
* @author Rasztemberg 
*/ 
package simpleGame; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.event.MouseAdapter; 
import javax.swing.JPanel; 


/** 
* This is main player Class. 
* 
*/ 


public class World { 

// Snake parameters 

private int x; 
private int y; 
private int width; 
private int height; 
private Color color; 

/** 
* Class constructor. Called when instantiated. 
* Assigns x and y coordinates to position the player. 
* Sets width, height and color to the rendered object. 
* 
*/ 


public World(int x, int y, int w, int h, Color c){ 

    this.x = x; 
    this.y = y; 
    this.width = w; 
    this.height = h; 
    this.color = c; 
} 

/** 
* Accepts Graphics object to render 
* player 1 shape 
*/ 

public void display(Graphics g) { 

    // This is player rendered graphics. 
    Graphics2D walls = (Graphics2D) g; // Graphical library to render shapes. 
    walls.setColor(color); 
    walls.drawRect(x, y, width, height); 
    walls.fillRect(x, y, width, height); 
} 
} 

现在,我做了这个for循环填充测试阵列:

int[][] wallArray = new int[800][600]; 

     for (int x = 0; x < wallArray.length; x++) { 
      for (int y = 0; y < wallArray.length; y++) { 
       wallArray[x][y] = 1; 
      } 
     } 

     wallArray[100][100] = 0; 
     greatWall = new World(wallArray); 

你知道我该如何绘制这个数组?我很抱歉的代码长度...

回答

2

根据您的游戏键盘的油漆阵列上只是油漆的东西:

@Override 
public void paint(Graphics g){ 
    super.paint(g); // Call it's parent for proper rendering. 
    for (int i = 0; i<wallArray.length; i++) 
     for (int j = 0; j<wallArray[0].length; j++){ 
      //do something for every field in the array 
      //i.e. g.setColor(Color.getColor(wallArray[i][j], 50, 50)); 
      //g.drawLine(i,j,i,j); 
    } 
    player.display(g); 
    enemy.display(g); 
} 

但是,你应该通过一些教程先下去绘画在Java中: http://www.oracle.com/technetwork/java/painting-140037.html

1

最好是有墙壁

List<Rectangle> walls = new ArrayList<>(); 

这是更优化,你可以简单地做:

for (Rectangle rect: walls) { 
    g.fillRect(rect.x, rect.y, rect.width, rect.height); 
} 

墙壁检测相似。

+0

但是在这种情况下,您必须每次遍历整个列表。我认为最有效的方法应该是为游戏板和集合等不可改变的东西组成的阵列。 – NeplatnyUdaj 2013-04-29 14:00:57