LoginSignup
3
3

More than 5 years have passed since last update.

tmlib.jsx - tmlib.js を jsx に移植してみた

Last updated at Posted at 2013-12-25

遅れてすいませんm(_ _)m
言い訳すると食中毒にかかっ...いやなんでもないです.

ってことで本題.
JavaScript 用にずっと作ってるゲームライブラリ tmlib.js を一部 jsx に移植してみました.

Github リポジトリはこちら.
お粗末な感じですが...

機能

ゲームを作るのに最低限必要な機能は移植したつもりです.

  • ベクトル計算(マトリックスは保留)
  • タッチ管理
  • イベント発火
  • タスク管理
  • 描画, 更新
  • リソース(現在は画像のみ)の読み込み管理
  • 衝突判定
  • 乱数生成簡易ラッパー

などなど

デモサンプル

いくつかデモサンプルをつくってみました.

使い方

touch the number のコードはこんな感じです.
一般的なゲームの作り方って感じでコードは丁度100行ぐらいです.

import "console.jsx";
import "js/web.jsx";

import "../../../src/app/scene.jsx";

import "../../../src/geom/vector2.jsx";

import "../../../src/display/canvasapp.jsx";
import "../../../src/display/canvaselement.jsx";
import "../../../src/display/sprite.jsx";
import "../../../src/display/label.jsx";
import "../../../src/display/shape.jsx";

import "../../../src/input/pointing.jsx";

/**
 * main
 */
class _Main {
    static function main(args: string[]): void {
        var canvas = dom.window.document.createElement("canvas");
        dom.window.document.body.appendChild(canvas);

        var app = new TouchColorApp(canvas as HTMLCanvasElement);
        app.canvas.setSize(640, 960);
        app.bgColor = "rgb(245, 245, 250)";
        app.canvas.fit();
        app.run();
    }
}

class TouchColorApp extends CanvasApp {
    /**
     * constructor
     */
    function constructor(elm: HTMLCanvasElement) {
        super(elm);

        var scene = new GameScene();

        this.replaceScene(scene);
    }
}

class GameScene extends Scene {
    var pieceGroup: CanvasElement = new CanvasElement();

    function constructor() {
        super();

        this.addChild(this.pieceGroup);

        for (var i=0; i<5; ++i) {
                for (var j=0; j<5; ++j) {
                var index = i*5+j;
                        var x = j*100;
                        var y = i*100;
                var angle = (360/25)*index;
                        var piece = new Piece(angle);
                        piece.setPosition(x+115, y+100);
                        this.pieceGroup.addChild(piece);
                }
        }
    }
    override function update(app:variant): void {
        this.checkCollision(app);
    }

    function checkCollision(app:variant): void {
        var baseApp = app as CanvasApp;
        var p = baseApp.pointing;
        if (!p.getPointingStart()) { return ; }

        var temp = new Vector2(p.position.x, p.position.y);

        this.pieceGroup.children.forEach(function(elm) {
            var canvasElement = elm as CanvasElement;

            if (canvasElement.isHit(temp)) {
                this.pieceGroup.removeChild(elm);
                canvasElement.scale.x *= 1.1;
                canvasElement.scale.y *= 1.1;
            }
        });
    }
}

class Piece extends CanvasElement {
        function constructor(angle:number) {
                super();

        this.width  = 64;
        this.height = 64;

        var color = "hsl(" + angle + ",75%, 55%)";
        var shape = new Shape(64, 64);
        shape.canvas.clear(color);
        this.addChild(shape);
        }
}

使い方

tmlib.jsx のテンプレートを用意しました. -> (こちら)
これを clone して grunt を使えばサクッと jsx でゲーム開発を始めることができます.

Setup

$git clone https://github.com/phi-jp/jsx-game-template.git
$cd jsx-game-template
$npm install
npm install

Build

grunt コマンドを叩くだけでビルドできます.
※grunt-cli をグローバルインストールしておく必要があります.

$grunt

感想

自分は C++ でずっとゲームを作って来たので
型付き言語でゲーム開発するのは懐かしい感じでわりとすんなり jsx やれました.

地味に関数オーバーロードのありがたさを感じた.
名前迷うのはもうイヤ><

他にも細々と書きたいことは山ほどあるのですが,
とりあえず公開します.

詳細は自分のブログのほうにでもいずれ書きたいと思います!!

以上, メリークリスマス♪

3
3
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
3
3