ddemilich 2024/04/13 19:58

ティラノスクリプトでカードを沢山生成してみた

本格的にゲームを開発する前の確認

以前の記事でティラノスクリプトでカードゲームを作ろう、という話をしました。
理屈としてはできそう、と思っていましたが、カードを沢山ゲームで取り扱って本当に大丈夫なのかが気になったので、とりあえず大量のカードを生成して動かしてみました。

動画では以下の順で操作を行っています。
1. 999枚のカードを生成
2. 999枚のカードを画面上に重ねて表示
3. 999枚を順に右側にアニメーションで動かす
4. TOPのカードを1枚めくる
5. TOPのカードを1枚伏せる
6. 山を崩す(これはおまけです)

生成と表示、アニメーションはそれぞれ10秒弱かかっています。
ボクのPCは少し古めではありますがゲーミングPCなので、これを一般的なスペックにおくのは無理があると思います。
平均的なユーザの環境を考慮すると、一気にカードを生成したり表示したりするのは設計上避けるべき、ということがわかりました。
また、一度表示までさせてしまえば、999枚であっても比較的スムーズに動くこともわかりました。消費RAMも100MBオーダーなので問題ないと結論付けます。

どういうコードで実装しているのか


ティラノスクリプトのタグを駆使してマクロを作りました。
将来的にはクラス化してもう少し綺麗にしたいと思います。
jumpタグを使って無理やりイテレーションを作っていますが、jump先のラベルは同じファイル名で重複してはいけないので、長い名前にしなくてはいけません。

カード生成

new_deckはcountで指定した数だけnew_cardをid=数字で呼び出します。
new_cardでは"card+id"という名前のキャラクタオブジェクトを作ります。

[macro name="new_deck"]
    [iscript]
        tf.card_count = mp.count
    [endscript]
    *new_deck_loop_head
    [jump cond="tf.card_count<=0" target="*new_deck_loop_end"]
        [new_card id="&tf.card_count"]
        [iscript]
            tf.card_count = tf.card_count - 1
        [endscript]
    [jump target="*new_deck_loop_head"]
    *new_deck_loop_end
[endmacro]

[macro name="new_card"]
    [iscript]
        tf.cardid = "card" + mp.id
    [endscript]
    [chara_new name="&tf.cardid" storage="chara/card/facedown.png" width="120" height="170" jname="カード"]
    [chara_face  name="&tf.cardid" face="up" storage="chara/card/faceup.png"]
    [chara_face  name="&tf.cardid" face="down" storage="chara/card/facedown.png"]
[endmacro]

カード表示

deck_showはcard+idをzindexをずらしながら同じ場所に重ねていきます。

[macro name="deck_show"]
    [iscript]
        tf.card_count = mp.count
    [endscript]
    *deck_show_loop_head
    [jump cond="tf.card_count<=0" target="*deck_show_loop_end"]
        [iscript]
            tf.cardid = "card" + tf.card_count
            tf.zindex = mp.count - tf.card_count + 1
        [endscript]
        [chara_show name="&tf.cardid" left="&mp.left" top="&mp.top" zindex="&tf.zindex" time="0"]
        [iscript]
            tf.card_count = tf.card_count - 1
        [endscript]
    [jump target="*deck_show_loop_head"]
    *deck_show_loop_end
[endmacro]

カード移動

deck_moveは指定したleft, topの座標に500msかけて1枚ずつカードを移動します。

[macro name="deck_move"]
    [iscript]
        tf.card_count = mp.count
    [endscript]
    *deck_move_loop_head
    [jump cond="tf.card_count<=0" target="*deck_move_loop_end"]
        [iscript]
            tf.cardid = "card" + tf.card_count
        [endscript]
        [anim name="&tf.cardid" left="&mp.left" top="&mp.top" time="500" effect="easeOutQuint"]
        [iscript]
            tf.card_count = tf.card_count - 1
        [endscript]
    [jump target="*deck_move_loop_head"]
    *deck_move_loop_end
[endmacro]

終わりに

なんだかマニアックな内容になってしまいましたが

  • 開発は順調です!
  • ティラノスクリプトでカードゲームが性能的に問題なく作れそう!

ということが伝えたいことになります。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索