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