日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

javafx中的tree_JavaFX中的塔防(4)

發布時間:2023/12/3 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javafx中的tree_JavaFX中的塔防(4) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

javafx中的tree

好的,到目前為止,我們已經創建了一個TileMap,將其顯示在屏幕上,并使其在第一部分中可編輯。 在第二部分中,我們使用A *算法實現了攻擊路徑的計算,并使敵人跟隨該路徑。 在第三部分中,我們創建了一些自定義的TileSetAnimations,以便我們可以將Insectoids圍繞它們的中心旋轉一個角度。 然后,我們將其應用于Insectoids,以便它們在飛行時會向前看,并朝向轉塔,因此它們始終會瞄準最接近的目標。 是時候讓炮塔向敵人射擊了。

首先,我們需要使用TileSets進行爆炸,并需要使用Pellet槍的子彈。 我在這里找到了一個不錯的免費爆炸片。 它比Sprite更大(128 * 128),并且爆炸沒有在中心開始,但是在相對于爆炸的類昆蟲的位置進行了一點擺弄之后,它的效果很好。 我自己創建了子彈,我知道我必須想出更好的東西:-),但是至少它在屏幕上可見。 擺弄正確的初始位置后,我創建了BulletLaunching行為:

new SpriteBehavior() { @Override public boolean perform(Sprite sprite) { double angle = rotateAnimation.getAngle(); double xVelocity = Math.cos(Math.toRadians(angle)); double yVelocity = Math.sin(Math.toRadians(angle)); final double centerX = x + (width / 2); final double centerY = y + (height / 2); double startX = centerX + (xVelocity * (width / 2)) - 4; double startY = centerY + (yVelocity * (height / 2)) - 4; Sprite bullet = new Sprite(getParent(), shoot, "bullet" + (bulletCounter++), startX, startY, 8, 8, Lookup.EMPTY); bullet.setVelocityX(xVelocity); bullet.setVelocityY(yVelocity); // add bullet behaviorreturn true; }@Override public long getEvaluationInterval() { return 2000000000; //To change body of generated methods, choose Tools | Templates. } });

大多數代碼都在計算初始位置,并確保子彈朝正確的方向前進。 現在我們需要添加一些碰撞檢測。 一些系統確實具有集中式碰撞系統,并允許添加偵聽器。 我更喜歡通過行為來再次執行此操作,因為我發現子彈本身會檢查它是否擊中物體,這更加自然和直觀:

bullet.addBehaviour(new SpriteBehavior() { private double range = 75;@Override public boolean perform(Sprite sprite) { Collection checkCollisions = sprite.getParent().checkCollisions(sprite); for (Collision collision : checkCollisions) { if (collision.getSpriteOne() instanceof EnemySprite) { sprite.getParent().removeSprite(sprite); ((EnemySprite) collision.getSpriteOne()).hit(6); return false; } else if (collision.getSpriteTwo() instanceof EnemySprite) { sprite.getParent().removeSprite(sprite); ((EnemySprite) collision.getSpriteTwo()).hit(6); return false; } } if (distance(sprite.getX(), sprite.getY(), centerX, centerY) > range) { sprite.getParent().removeSprite(sprite); return false; } return true; } });

我們在這里所做的只是向GameCanvas詢問此特定Sprite的碰撞,如果它是敵人,則嘗試造成傷害。 匿名的內部項目符號Sprite和Behavior將在以后轉換為常規類,以使代碼更好,并使它們更易于創建和配置。 在“敵人精靈”方面,我們需要實現“命中”方法:

public void hit(int impact) { power = power - impact; if (power getParent().removeSprite(this); getParent().addSprite(new Sprite(getParent(), explosionAnimation, "explosion", getX() - 30, getY() - 80, 128, 128, Lookup.EMPTY)); } }

非常簡單:萬一命中致命,我們刪除Sprite并添加一個爆炸Sprite。 如果精靈大小匹配,我們可以簡單地在現有Sprite上設置爆炸動畫。 如果可以創建自己的SpriteSheets,則應該這樣做,這樣會使工作變得更加容易。 ExplosionAnimation配置為僅運行一次,并且一旦完成動畫,它就有一個EventHandler可以刪除Sprite:

explosionAnimation = new TileSetAnimation(explosion, 100f); explosionAnimation.setRepeat(1); explosionAnimation.setOnFinished(new AnimationEventHandler() { @Override public void handleEvent(AnimationEvent event) { Sprite target = event.getTarget(); target.getParent().removeSprite(target); getParent().removeSprite(EnemySprite.this); } });

而已。 我們的炮塔現在將向敵人發射子彈,并試圖傷害他們,直到它們爆炸:

在視頻中,您還可以看到DebugLayer。 當前,它跟蹤一些性能數據,主要是FPS,以及兩個脈沖之間的時間是否太長。 我還在屏幕頂部添加了一個項目符號,以可視方式檢測出卡頓的動畫。 您可以放心地忽略……

因此,現在我們幾乎擁有了塔防類型游戲所需的一切。 在本教程的下一部分中,我們將為敵人添加傷害指示器,并向HUD添加得分和控件以開始下一波攻擊。

在Eppleton博客上,我們的JCG合作伙伴 Toni Epple 參考: JavaFX中的塔防(4) 。

翻譯自: https://www.javacodegeeks.com/2014/03/tower-defense-in-javafx-4.html

javafx中的tree

總結

以上是生活随笔為你收集整理的javafx中的tree_JavaFX中的塔防(4)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。