javafx中的tree_JavaFX中的塔防
javafx中的tree
我想長時間使用我的游戲引擎來編寫《塔防》游戲,但是由于另一個小組努力創建JavaFX《塔防》游戲,所以我認為我寧愿創建另一款游戲。 從郵件列表中,我了解到不再開發其他游戲。 因此,我決定嘗試一下。
塔防是一款非常適合基于圖塊的方法的游戲,因此我開始尋找一些圖塊。 我在這里找到了一些東西 ,而藝術家Silviu Ploisteanu允許我在演示中使用它們。 塔防作為游戲與TileMap編輯器非常相似,因此我將能夠重用我之前創建的編輯器中的許多代碼:
首先要做的是將單個圖形組合成圖像進行平鋪。 我對敵人,炮塔基地,大炮,地形進行了分組,還為背景創建了一個圖塊圖塊。 之后,我使用了TileMap編輯器( http://www.mapeditor.org/ )從這些圖像創建TileSet。 我可能不得不再次做這部分,因為Gimp在此過程中更改了顏色,但是現在我對圖像的外觀不太在意。
然后,我從底部到頂部將5層添加到新地圖:“背景”,“地形”,“炮塔基地”,“炮塔大炮”和“敵人”。 也將有一個“子彈和爆炸”層,但是稍后我將手動添加它。 到目前為止,還沒有涉及任何編碼,通過基于TileMap的方法,我們已經有了游戲的序列化格式。 因此,當用戶編輯地圖時,我們可以簡單地將更改存儲到TileMap中。 現在的地圖如下所示:
下一步是編碼。 我只是用BorderPane創建了一個新的JavaFX Application。 在中心,我將有一個運動場,在右邊,我將有一個帶有大炮的調色板。
這是創建GameCanvas的方法:
tileMap = TileMapReader.readMap(fileURL); canvas = new GameCanvas(tileMap.getTilewidth() * tileMap.getWidth(), tileMap.getHeight() * tileMap.getTileheight(), tileMap.getTilewidth() * tileMap.getWidth(), tileMap.getHeight() * tileMap.getTileheight()); // add all the layers ArrayList layers = tileMap.getLayers(); for (TileMapLayer tileMapLayer : layers) {canvas.addLayer(tileMapLayer); }然后我獲得帶有大炮的TileSet并創建Palette。 我正在為調色板使用VBox,因為我還希望使地形可編輯,因此以后我可能會添加另一個TileSet:
TileSet turrets = tileMap.getTileSet("turrets");TileSetView turretView = new TileSetView(turrets); VBox palette = new VBox(); palette.getChildren().addAll(turretView);TileSetView僅顯示基礎圖像,并允許您通過單擊鼠標來選擇一個Tile。 當我們從用戶交互開始時,我可能稍后再顯示代碼。 現在,這是我們在啟動游戲后看到的內容:
難看的紅色區域是默認背景。 不幸的是,背景圖像的Dimension并非圖塊大小的倍數,因此稍后我將不得不定義一個不正確的地方。 現在,我將忽略它,它只是一個背景……
現在,我們希望用戶能夠放置炮塔。 目前,玩家擁有不限量的金錢,因此他可以根據需要放置任意數量的炮塔。 唯一的限制是,只有在平臺上并且沒有炮塔的情況下,他才可以放置它們。 因此,我們為Mouse事件添加了一個EventHandler,該事件處理程序是從Palette中選擇的炮塔,并將其添加到炮塔基礎層。 為了簡單起見,我現在將炮塔基座和炮塔組合成一個圖像:
canvas.setOnMousePressed(new EventHandler() { @Override public void handle(MouseEvent t) {double x = t.getX(); double y = t.getY();int idx = (int) ((int) x / tileMap.getTilewidth() + (((int) y / tileMap.getTileheight()) * tileMap.getWidth())); if (platformLayer.getGid(idx) != 0 && turretBaseLayer.getGid(idx)==0) { turretBaseLayer.getData().setGid(idx, turretView.getSelectedGid()); } } });結果,我們現在可以將轉塔放置在沒有平臺但還沒有轉塔的地方:
我認為第一部分已經表明,該API非常適合創建simplegame,而無需編寫大量代碼。 在下一部分中,我們將添加生成點和目標,并使用A *計算敵人的路徑。
翻譯自: https://www.javacodegeeks.com/2013/10/tower-defense-in-javafx.html
javafx中的tree
總結
以上是生活随笔為你收集整理的javafx中的tree_JavaFX中的塔防的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国货品牌,不能只靠哭穷
- 下一篇: 安卓恐怖游戏排行榜(安卓恐怖游戏)