少し前にタイル ベースのシミュレーションを行ったとき、次のようにしました。タイル マップの 2 つのレイヤーがありました。1 つは地形用、もう 1 つはユニット用です。マップ自体は で表されていましたJPanel
。大まかに言えば、次のようになりますJPanel
。
public void paintComponent(Graphics graphics) {
// create an offscreen buffer to render the map
if (buffer == null) {
buffer = new BufferedImage(SimulationMap.MAP_WIDTH, SimulationMap.MAP_HEIGHT, BufferedImage.TYPE_INT_ARGB);
}
Graphics g = buffer.getGraphics();
g.clearRect(0, 0, SimulationMap.MAP_WIDTH, SimulationMap.MAP_HEIGHT);
// cycle through the tiles in the map drawing the appropriate
// image for the terrain and units where appropriate
for (int x = 0; x < map.getWidthInTiles(); x++) {
for (int y = 0; y < map.getHeightInTiles(); y++) {
if (map.getTerrain(x, y) != null) {
g.drawImage(tiles[map.getTerrain(x, y).getType()], x * map.getTILE_WIDTH(), y * map.getTILE_HEIGHT(), null);
}
}
}
if (map.getSimulationUnits() != null) {
for (Unit unit : map.getSimulationUnits()) {
g.drawImage(tiles[unit.getUnitType()], (int) Math.round(unit.getActualXCor() * map.getTILE_WIDTH()), (int) Math.round(unit.getActualYCor() * map.getTILE_HEIGHT()),
null);
}
}
// ...
// draw the buffer
graphics.drawImage(buffer, 0, 0, null);
}
論理:
private Terrain[][] terrain = new Terrain[WIDTH][HEIGHT];
/** The unit in each tile of the map */
private Unit[][] units = new Unit[WIDTH][HEIGHT];
次に、基本的にゲームとユニットの位置やその他のものを更新するゲームループがありrender()
ますupdate()
。以下に提供したリンクを確認してください。
ノート
- あなたは単純なゲームを作っているので、ゲーム ループの作成に関するこの投稿は間違いなく役に立ちます。これは、マップ上のオブジェクトの移動に関する質問にも答えてくれることを願っています。
- このサイトも非常に役立ちます。おそらく、ある時点で衝突も検出する必要があるからです。