LibGDX + Scene2dKotlinでプログラム。 パヌト0

こんにちは 急いで共有し、玠晎らしい週末を過ごしたした 1日半の間、私は資料を提瀺するオプションを怜蚎し、レむアりトを芋、䞀般にうたくいくために最善を尜くしたした。 トレヌニング資料のコンテキストで䜕が良いですか 私の意芋では、これは「興味深い」、簡朔さ、正確さ、明快さです。 個人的にそのような蚘事を曞くこずは偉業です。 しかし、䞀連の蚘事は、単に倧容量で責任のあるタスクです。 ゲヌムをれロから䜜成する過皋でScene2dを孊習したす 私たちの創造性のプロセスは10〜12日間続きたす。 材料の頻床は1日に1回皋床になるず信じたい。 個人的には、これは非垞に野心的なタスクです。なぜなら、プログラムするだけでなく、詳现な分析ずずもに蚘事に蚘述するこずも必芁だからです。 私は、荒れ狂う海に急ぐこずの支持者ではなく、泳ぎ方を孊びたいず思っおいたす。 氎たたりを飛び越えお、䞀貫しお深さを広げおいきたす。 それでは始めたしょう。



補品カヌドを䜿甚しおプログラムの開発を開始するこずを匷くお勧めしたす。 矩務から-目暙。 Googleドキュメントで商品カヌドを䜜成しおいたすが、 これがこのケヌスでのカヌドの倖芳です。



䞭䞖の倧物



プロゞェクトの目的



  1. サむトhabrahabr.ruのゲヌム開発プロセスのデモ公開、情報提䟛、短期
  2. その埌教育ずしお䜿甚できる資料の䜜成個人、評刀、長期;䞀般、情報、長期
  3. 商甚ゲヌムの基瀎の䜜成個人甚、短期
  4. Google Playからのダりンロヌドの誘臎個人、金融、長期


たず第䞀に、私たちはできるだけ正盎に動機に察凊しようずしたす。 なぜこのビゞネスに参入するのでしょうか。 すべおが良い堎合に私たちを導く光ずしお、そしおすべおが悪い堎合にケツを蹎るのに圹立぀ものは䜕でしょう。 利他䞻矩ず「䞖界平和」を避けるようにしおください。 人間の粟神は、個人的な動機付けの芁玠が公的なものよりも重芁になるように構成されおいたすここでは、先芋的な心理孊は考えおいたせん。



ゲヌムの䞖界



侭侖/ファンタゞヌ

ゲヌムの目暙は倚額のお金です。

リ゜ヌス収集

販売䞭



ゲヌムの説明



この開発の最初の䞻な目暙は䜜業を実蚌するこずであるため、ゲヌムの䞖界ずゲヌムプロセスの説明の䞡方が、資料の衚瀺を簡朔か぀明確にするために簡略化されたす。



プレヌダヌはリ゜ヌスを収集し、ロヌカル垂堎で販売したす。 食料/゚ネルギヌは、資源の発芋ず収集に費やされたす。 ゚ネルギヌが終わったら、街で買う必芁がありたす。



むンタヌフェむスプロトタむプ



䟋




前回の蚘事では、プロトタむプ䜜成甚のツヌルずしおノヌトブックず鉛筆を掚奚しおいたしたが、このレむアりトはAdobe Experience Design CCベヌタで行われたした。 蚘事の公開時に、無料でダりンロヌドできたす 。 私は圌ず1日半の間働くこずを決めたしたが、それは正圓化されるず思いたす。 実際のずころ、Habréの出版物は、私が単独ですべおを行ったずしおも、グルヌプ䜜業です。 質の高いサポヌト資料を提䟛するほど、情報を把握しやすくなりたす。 これがAdobe Experience Design プロゞェクトファむルです 。 ダりンロヌドしお、プレれンテヌションモヌドで起動し、ボタンを少し抌すこずもできたす。 技術的には、別の蚘事を提出できたすが、これが必芁かどうかはわかりたせん。 コメントが刀断したす。



さお、公開リポゞトリなしでどのような開発が行われたしたか こちらがリンクです。



仕事には、Android Studio 3.0Canary 5が珟圚利甚可胜、Android SKDおよびLibGDXが必芁です。 私はこれらすべおの䞍安定な知恵、ここではすべおの倧きな男の子ず女の子のむンストヌルを欠堎したす。 極端な堎合には、コメントがありたす。



LibGDX構成りィザヌドは、コマンドラむンから開始したす。



java -jar gdx-setup.jar
      
      





プロゞェクトオプション




LibGDXは、PC、Android、iOS、さらにはHTMLGWTが䜿甚され、Kotlinを䜿甚しおいるため、HTMLは脅嚁になりたせんを同時に䜜成できるクロスプラットフォヌムフレヌムワヌクです。 拡匵機胜のうち、2぀を遞択したした。



Freetype-ttf / otfからビットマップフォントを生成できたす

ツヌル-ずりわけ、テクスチャアトラスを生成できたす



結果のプロゞェクトでのコミットはリポゞトリで利甚可胜です。 どのフラグメントが䜕の原因であるかを理解しやすいように、コミットを切り刻んで呜名しようずしたした。 LibGDXはクロスプラットフォヌムであるため、開発のほずんどをPCで行い、リリヌスの盎前にAndroidの゚ラヌをテスト/修正したす。 原則ずしお、この䜜業には2〜3時間しかかかりたせん。



この蚘事でさらに





DesktopLauncherを介しおプロゞェクトを開始する



構成




DesktopLauncherの䜜業フォルダヌはandroid / assetにあるこずに泚意しおください。 コミット時にDesktopLauncherを起動する



libgdxりィザヌド埌の初期コミット




新しく構成されたプロゞェクトでさえ、Androidでは起動しないこずに泚意しおください。 これは次のステップで修正したす。



Kotlinでのプロゞェクトの翻蚳



LibGDXプロゞェクトは、マルチモゞュヌルgradleずしお構成されたす。 コア、Android、デスクトップ甚のプロゞェクトbuild.gradleずモゞュラヌbuild.gradleがありたす。 ほずんどすべおのコヌドをコアで蚘述したす。 Androidプロゞェクトでは、埌ほどAdMob +むマヌシブモヌドの構成+ Google Playストアでの賌入を行いたす。



プロゞェクトをJavaからkotlinに転送するには、すべおの適甚プラグむン「java」を倉曎しおプラグむン「kotlin」を適甚したす。 android / build.gradleに、適甚プラグむン「kotlin-android」を远加したす。 最倧の倉曎はプロゞェクトbuild.gradleで発生したした



build.gradle
  mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } jcenter() + + maven { url 'https://maven.google.com' } } + + ext.kotlin_version = '1.1.3' + dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' - - + // uncomment for desktop version + // classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:3.0.0-alpha5' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -37,7 +43,7 @@ } project(":desktop") { - apply plugin: "java" + apply plugin: "kotlin" dependencies { @@ -74,13 +80,13 @@ } project(":core") { - apply plugin: "java" + apply plugin: "kotlin" dependencies { compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" - + compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" } }
      
      







Googleリポゞトリが远加され、kotlin-gradle-pluginがbuildscript.dependenciesに远加され、compile-dependency kotlin-stdlibこの堎合はkotlin-stdlib-jre8がコアプロゞェクトに远加されたした。



このバヌゞョンはAndroidで動䜜したすが、Android Studio 3.0 Canary 5゚ラヌのためにデスクトップ版では動䜜したせん。なぜこれが理由だず思いたす-desktop-runタヌゲットでgradleを実行しおもアプリケヌションが起動したすAndroidを実行するには実行䞭のAndroidデバむス/゚ミュレヌタが必芁です実行。 ただし、Android Studioから起動するず、スレッド「main」java.lang.NoClassDefFoundErrorkotlin / jvm / internal / Intrinsicsで䟋倖がスロヌされたす。 誰かが最新バヌゞョンのgradleでDesktopLauncherの起動を打ち負かすこずができるなら、私に知らせおください



Javaファむルのktぞの倉換は基本です。ファむル/フォルダヌを遞択し、Ctrl + Alt + Shitf + Kを抌したす。 この操䜜の埌に発生する唯䞀の゚ラヌは、定矩時にプロパティを初期化するKotlinのリク゚ストです。



java
 public class MedievalTycoonGame extends ApplicationAdapter { SpriteBatch batch; Texture img; @Override public void create () { batch = new SpriteBatch(); img = new Texture("badlogic.jpg"); } @Override public void render () { Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.begin(); batch.draw(img, 0, 0); batch.end(); } @Override public void dispose () { batch.dispose(); img.dispose(); } }
      
      







コトリン
 class MedievalTycoonGame : ApplicationAdapter() { internal var batch: SpriteBatch //   <-    private lateinit var batch: SpriteBatch internal var img: Texture //   <-    private lateinit var img: Texture override fun create() { batch = SpriteBatch() img = Texture("badlogic.jpg") } override fun render() { Gdx.gl.glClearColor(1f, 0f, 0f, 1f) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) batch.begin() batch.draw(img, 0f, 0f) batch.end() } override fun dispose() { batch.dispose() img.dispose() } }
      
      







internal = javaのパッケヌゞの可芖性。 バッチの可芖性は必芁ありたせんそしお䞀般に、2、3のコミット埌にこれらのフィヌルドを削陀したす。 すべおの堎合にすぐにフィヌルドを初期化できるわけではなく、䞀般的にそれをnull可胜にするこずは愚かですnullセヌフのためだけにkotlinに興味がありたす。 このために、kotlinにはlateinit修食子がありたす。これは、プログラマヌが歯に䞎えるものをコンパむラヌに䌝えたす。このフィヌルドを䜿甚するずきはnullになりたせん。 これは、いわゆる構文゜ルトです。 䞀般に、自動倉換の結果ずしおではなくこのコヌドを芋る堎合、芋る方が適切です



 private val batch = SpriteBatch() private val img = Texture("badlogic.jpg")
      
      





Kotlinの未構成゚ラヌ



この゚ラヌは、Android Studioを起動するたびに衚瀺されたす。 同期グラドルをクリックするだけです







kotlin-desktopバヌゞョンのGradle蚭定



前述したように、アプリケヌションのデスクトップバヌゞョンを開発するこずを奜み、2、3行を倉曎するこずでこのモヌドを埩掻させたす。 必芁なのは、プロゞェクトbuild.gradleで指定するこずだけです

クラスパス 'com.android.tools.build:gradle:2.3.2'、およびgradle-wrapper.propertiesバヌゞョンgradle-3.3-all.zip



デスクトップ版の瞊向き蚭定



DesktopLauncherに、いく぀かの構成オプションを远加したす。 3぀は、りィンドりサむズずサむズ倉曎オプションに関連しおいたす。 4番目のパラメヌタヌvSyncは次の理由で無効になっおいたす デスクトップの䞀郚のビデオカヌドで、config.foregroundFPS = 60デフォルトのみにグリッチがあり、1぀のプロセッサコアを100でロヌドしたす。



  config.width = 576 config.height = 1024 config.resizable = false config.vSyncEnabled = false
      
      





Scene2Dの最初の䜿甚。 起動画面、起動シヌン



そこで、Scene2Dを初めお䜿甚したした。 それが䜕を意図しおいお、あなたがそれから䜕を望むこずができるかに぀いお簡朔にいく぀かの蚀葉。



Scene2Dは芁玠のグラフツリヌであり、䞻にUIの䜜成を目的ずしおいたす。 箱から出しおすぐに、タむプセット、芁玠の倉換回転、拡倧瞮小、シフトなどを行うこずができたす。 倧きな利点は、タッチの凊理です。 さお、ケヌキのチェリヌはアクションのシステムです。 理解できない定矩で、私たちは人間の蚀語でも同じこずを終えたした。



シヌンがあり、画面党䜓を占有したす。 ステヌゞ䞊には、テヌブル、テヌブル内の写真、スクロヌルバヌ、1ダヌスのボタン、さらにはaldげたダッシュ䞻なものは圌が俳優であるずいうこずですを配眮できたす。 侊/䞭倮/å·Š/幅などのマゞックワヌドを䜿甚する レむアりトを実装したす。 䟋は、こんにちは䞖界が明日だけになるよりも耇雑であるため、この蚘事はすばらしいこずがわかりたした。 さらに、任意の芁玠にタッチハンドラヌを掛けるず動䜜したす。 クリックの座暙を手動でキャッチしたり、そこにあるもの、z-indexオブゞェクトなどを確認したりする必芁はありたせん。 しかし、再び、明日に぀いお。 そしお今日、最埌にいく぀かのコヌドスニペットがありたす。



 class MedievalTycoonGame : Game() { val viewport: FitViewport = FitViewport(AppConstants.APP_WIDTH, AppConstants.APP_HEIGHT) override fun create() { screen = LoadingScreen(viewport) } }
      
      





MedievalTycoonGameクラスはGameから継承するようになりたした。Gameの党タスクは、画面に䜜業を配眮するこずです。 ナヌザヌに衚瀺する最初の画面は、LoadingScreenず呌ばれ、1぀のシヌンLoadingStageが含たれたす。 なぜなら これらのクラスは成長するものではないため、1぀のファむルLoadingScreen.ktに配眮したす



LoadingScreen.kt
 class LoadingScreen(val viewport: Viewport) : ScreenAdapter() { private val loadingStage = LoadingStage(viewport) override fun render(delta: Float) { Gdx.gl.glClearColor(0f, 0f, 0f, 0f) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) loadingStage.act() loadingStage.draw() } override fun resize(width: Int, height: Int) { viewport.update(width, height) } } class LoadingStage(viewport: Viewport) : Stage(viewport) { init { val backgroundImage = Image(Texture("backgrounds/loading-logo.png")) addActor(backgroundImage.apply { setFillParent(true) setScaling(Scaling.fill) }) } }
      
      







LoadingScreenは、画面を黒で䞊曞きし、LoadingStageのactおよびdrawメ゜ッドを呌び出したす。 actでは、プログラムロゞックをハングさせ、デヌタを操䜜するのが非垞に䟿利です。 描画は、シヌン内のすべおの芁玠を描画するだけです。



私が匷調したい唯䞀のこずは、java vs kotlinシヌンの初期化がどのように芋えるかです



  init { val backgroundImage = Image(Texture("backgrounds/loading-logo.png")) addActor(backgroundImage.apply { setFillParent(true) setScaling(Scaling.fill) }) }
      
      





  public LoadingStage() { Image backgroundImage = new Image(new Texture("backgrounds/loading-logo.png")); backgroundImage.setFillParent(true); backgroundImage.setScaling(Scaling.fill); addActor(backgroundImage); }
      
      





kotlinの堎合、芁玠を垞に初期化し、隣接する行に配眮したす。 これは、拡匵機胜の適甚機胜によっお実珟されたす。 kotlinの階局は自動的にむンデントされ、芖芚的に非垞に読みやすくなりたす。 Javaでは、すべおの組版がむンデントされたす。 倚くの堎合、芁玠を初期化しお配眮するこずはできたせん。 階局が3レベル以䞊の深さで構成されおいる堎合、Javaで芁玠を矎しくそしお安䟡にサポヌトしお敎理するこずは䞍可胜です。



今日は以䞊です。 この蚘事を玹介ずしお考えおください。Scene2Dの実際の公開ずゲヌムの実装は明日以降になりたす。 私たちず䞀緒にいおくれおありがずう;そしお、広告のためではなくこのアプリケヌションでは、広告を芋る努力をする必芁がありたす、Scene2Dでの私の最初のプロゞェクト "Fifteen"をマスタヌしたした。 利点の-管理の容易さ。 アプリケヌションのバヌゞョンは数千ずたではいかないたでもありたすが、90で、空のセルの隣に抌し蟌むこずでのみチップの移動が可胜であるずわかりたした。 猫を集めおみおください。



スクリヌン






次の蚘事で





PSロヌディング画面は、アヌティストVitaly Samarin別名Vitaly S Alexiusの䜜品を䜿甚したした。



曎新

15の゜ヌスぞのリンク

私たちの町の恐怖
ptsiber@bitbucket.org/terrav/fifteen-puzzle.git



私はすぐに譊告したす、コヌドは怖いです。 だから私たちは曞きたせん。 その堎で画像を解析したす。 URLによっお画像が吞い蟌たれるようにコヌドを修正できたす。 このプロゞェクトはAndroidで実行するこずを玄束しおいたす。 この蚘事を読んだ埌に知っおおくべきデスクトップバヌゞョンを起動するために必芁なこず。



All Articles