LoginSignup
12
12

More than 5 years have passed since last update.

[tmlib.js] スプライトのテクスチャをプログラムで生成する

Last updated at Posted at 2014-07-09

tm.display.Spriteのテクスチャに、プログラムで動的に生成した画像を利用する方法を紹介します。

やり方は至って簡単。
tm.graphics.Canvasオブジェクトを画像アセット名の代わりにコンストラクタに渡すだけです。

// キャンバスを用意
var t = tm.graphics.Canvas();

... // いろいろ描く

// スプライトに利用する
tm.display.Sprite(t);

コード例

Canvasに画像を描く

// 100x100を横に12個並べたテクスチャを生成します
var texture = tm.graphics.Canvas().resize(100 * 12, 100);

for (var i = 0; i < 12; i++) {
    // 初期位置を保存しておきます
    texture.save();

    // 右に100ずつずらします
    texture.translate(100 * i, 0);

    // 放射状グラデーションを作成します
    var h = parseInt(360 * i / 12); // 色相
    var gradient = tm.graphics.RadialGradient(50, 50, 0, 50, 50, 50)
        .addColorStopList([
            { offset: 0.0, color: "hsla({0}, 100%,  80%, 1.0)".format(h) },
            { offset: 0.5, color: "hsla({0}, 100%,  80%, 1.0)".format(h) },
            { offset: 1.0, color: "hsla({0}, 100%,  50%, 1.0)".format(h) },
        ])
        .toStyle();

    // ハートを描画します♥
    texture
        .setFillStyle(gradient)
        .fillHeart(50, 50, 50);

    // 描画位置をリセットします
    texture.restore();
}

以上で、色が微妙に変化しつつ横に12個並んだハートの画像が出来ました。

参考までに、出力してみた結果がこちら。

hearts.png

あとはこれを使ってスプライトを生成すればOKです。

スプライト生成
var heart = tm.display.Sprite(texture, 100, 100)
    .setFrameIndex(0)
    .setPosition(200, 200)
    .addChildTo(this);

// frameIndexを変更すると色が変わります
heart.frameIndex = 4; // 緑に
heart.frameIndex = 7; // 青に

動作サンプル

12
12
2

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