10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ドワンゴAdvent Calendar 2017

Day 13

RPGアツマールに公開するゲームをScalaで書く

Posted at

この記事は、dwango advent calenderの13日目の記事です。

導入

最近、スマホゲームが隆盛を極めていますね。
しかし、Android用、iOS用とアプリを作るのは骨が折れます。
そこで、HTML5なゲームを作れば楽なんじゃないか、と思っています。

リバースエンジニアリングしやすいとか、いろいろ課題はありますが、PCやスマホにダウンロードなりインストールなりしなければいけない、通常のゲームアプリケーションに比べると、HTML5ゲームはユーザーが遊びはじめるのにハードルが低いため、大きなメリットがあると思います。
PCやスマホの性能も上がっていますし、セキュリティ的にも比較的安全です。

一方で、Scalaは型があって、Javaより融通がきいて、個人的にとても好きな言語です。おすすめです。

ということは、ScalaでHTML5なゲームを作れたら楽しいだろう、という趣旨の記事になります。

ゲームは作るのも楽しいですが、人に遊んでもらうともっと楽しいので、最後にRPGアツマールへ投稿します。

RPGアツマール

dwangoの運営しているゲーム公開サイトです。
RPGツクールで作ったゲームの公開に便利なよう1ですが、ただのJSで書いたプログラムも動くようです。

Why Scala.js?

Javaで使えてHTML5ゲームに対応しているフレームワークというと、libGDX。
しかし、libGDXは、JSに変換するのにGWTを使っているため、Scalaは使えません2

どうしてもScalaでゲームを作りたい。
ならScalaで生JSを吐けばいいじゃないか。

ということで、Scala.jsを使います。

CreateJS

最近?3メジャーバージョンアップしてWebGLに対応した神ライブラリ。
EaselJSは、特に2D描画をするのに便利で、普通の3Dライブラリと比べ、文字の描画や、複雑な図形描画が簡単にできます。

CreateJS配下には、音声出力を司るSoundJSや、
アニメーションを司るTweenJSなどがあります。

とりあえず動くものを作る

準備

インストールする

が必要になります。

サンプルプロジェクトのClone

https://github.com/sujoyu/scala-atsumarugit cloneしてきます。

git clone https://github.com/sujoyu/scala-atsumaru.git
cd scala-atsumaru

source-mapを有効にするために、

npm install

も走らせておきます。

ScalaをJSに変換する

以下のコマンドを実行します。

sbt fastOptJS

index-fastopt.htmlをブラウザで開くと、ゲームが動くと思います。

Scalaを書き換えたら自動で変換する

以下のコマンドを実行します。

sbt ~fastOptJS

敵の動きがイマイチですね。

ここの関数を書き換えてみましょう。
render関数は、1フレーム毎に呼ばれます。
deltaTimeには前回の描画から何ms後に描画されたかが渡ってきます。
x, yに敵機の座標を入れます。

コンパイルが終わったら、ブラウザをリロードしてみましょう。
思うように動きましたか?

プロダクション用の最適化したJSに変換する

以下のコマンドを実行します。

sbt fullOptJS

index.htmlをブラウザで開くと、ゲームが動くと思います。

RPGアツマールに投稿する

作ったゲームをzipに固める

以下のように、不要なファイルを除いたディレクトリ構造をつくり、zipに固めます。

.
├── index.html
└── target
    └── scala-2.12
        ├── scala-atsumaru-tutorial-jsdeps.min.js
        └── scala-atsumaru-tutorial-opt.js

アップロードする

  1. RPGアツマール にとびます
  2. ログインします(アカウントがない場合は、お手数ですが作成してください)
  3. 右上の スクリーンショット 2017-12-12 17.53.48.png ボタンをクリックします
  4. スクリーンショット 2017-12-12 17.55.32.png

    ゲームファイルアップロードボタンからアップロード、必要事項を入力します
  5. 保存ボタンをクリックし、数秒 ~ 数分待てば、投稿完了です

実際に投稿したゲームは以下です。
https://game.nicovideo.jp/atsumaru/games/gm5351?key=4372c6088ebe

最後に

今回のサンプルプロジェクトを土台にして、ゲームを作ると楽かもしれません。
最初は、敵の動きや弾の制御を作ると面白いかも。
タイトル画面やゲームオーバー、スコア辺りを実装するとSTGっぽくなってきます。

イマイチな部分も多いので、一から作ったほうが良いかもしれませんけどね。

皆さんがもっと手軽にゲームを作って、公開していける世の中になるといいですね。

  1. RPGツクールで作ったゲームをアップロードしたことがないので...

  2. GWTはScalaに対応していない。
    Scala+GWTというプロダクトもあるけど、ぜんぜん更新されてない...

  3. 最近時が経つのが早い

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?