JavaFXコンテスト:タワーディフェンス

みなさんこんにちは。 最近開始されたJavaFX Tower Defenseコンペティションに注目したいと思います。



どちらのデザイナーも競争に参加でき、ゲームの世界のベクトル画像を描くよう招待され、プログラマーは主催者が提供するエンジンを改善する必要があります。 コンテストに参加したストーリーをブログで説明できる人のための場所さえあります。



なぜJavaFXなのか? この技術に出会ったことがない人は、詳細を学ぶことに興味があるかもしれません。





設計からプログラムまで



すべては、ゲームワールドの各要素を個別のレイヤーに描画し、jfx(jfx:element-name)プレフィックスを付けた名前を付けるデザイナーから始まります。 その後、標準プログラムを使用して、ベクトル画像をFXZファイル(JavaFX言語のベクトルグラフィック用の特別な形式)に変換する必要があります。



さらに、プログラマーはFXZファイルから名前で必要な要素を引き出し、自分のプログラムに配置できます。



ベクトル図



ベクターグラフィックスを含むファイルが2つの要素で構成されているとします:クリーチャーである円と道路。



<?xml version = "1.0" encoding = "utf-8" standalone = "yes" ?>



<svg width = "550px" height = "550px" viewBox = "0 0 1200 400" xmlns = "http://www.w3.org/2000/svg" version = "1.1" >



<g id = "jfx:path" >

<path d = "M 50120 L 250120 A 25、20 0 0 1 250300 L 150300 A 25 20 0 0 0 150480 L 340 480"

fill = "none" stroke = "darkgreen" stroke-width = "20" />

</ g >



<g id = "jfx:creature" >

<circle cx = "150" cy = "50" r = "20" fill = "yellow" stroke = "orange" />

</ g >



</ svg >

FXZファイル



変換後:

FXD {

内容 [

グループ {

id "パス"

内容 [

SVGPath {

内容 「M 50120 L 250120 A 25、20 0 0 1 250300 L 150300 A 25 20 0 0 0150480 L 340480」

塗りつぶし null

ストローク ダルクグリーン

strokeWidth 20.0

}

]

}

グループ {

id "creature"

内容 [

サークル{

centerX 150.0

centerY 50.0

塗りつぶし 黄色

半径 20.0

ストローク オレンジ

}

]

}

]

}







レイヤー名からjfxプレフィックスが削除されることに注意してください。



JavaFXプログラム



これで、プログラムで次の2つの要素を取得して画面に表示できます。



import javafx.fxd。* ;

import javafx.stage。* ;

import javafx.scene。* ;



def graphics = FXDLoader。 loadContent "{__DIR __} graphics.fxz" ;



ステージ{

title 「アプリケーションのタイトル」

scene シーン{

550

高さ 550

内容 [グラフィック。 getNode "path" 、グラフィック。 getNode "creature" ]

}

}



アニメーション



この例は非常に単純であり、さらに面白くするために、パスに沿って移動するクリーチャーのアニメーションを追加します。



これを行うには、Group要素からパス自体を取得し、PathTransitionクラスを使用する必要があります。



import javafx.fxd。* ;

import javafx.stage。* ;

import javafx.scene。* ;

import javafx.scene.shape。* ;

import javafx.animation。* ;

import javafx.animation.transition。* ;



def graphics = FXDLoader。 loadContent "{__DIR __} graphics.fxz" ;

defクリーチャー=グラフィック。 getNode "creature" ;

def path = graphics。getNode "path" as Group 。 SVGPathとしてのコンテンツ [ 0 ]



ステージ{

title 「アプリケーションのタイトル」

scene シーン{

550

高さ 550

コンテンツ グループ {

scaleX 0.5

scaleY 0.5

内容 [パス、クリーチャー]

}

}

}



PathTransition {

期間 10秒

ノードクリーチャー

interpolator 補間器。 線形

path AnimationPath。 createFromPath path

} プレイ ;

したがって、道路に沿ったクリーチャーの動きと、タワーからクリーチャーへの砲弾の飛行をアニメーション化できます。



面白い? その後、 JavaFX Tower Defenseコンテストに参加してください。




All Articles