GDevelop で年月日や時間などを取得する方法

GDevelop は Javascript で動いてるんだから、Javascript の Date オブジェクトと同等の機能がアクションで利用できるもんだと勝手に思っていたのですが、意外とそうでもなかったのでちょっと調べてみました。

GDevelop 5.0.0-beta110 の時点では、年月日や時間を取得するには Time() 式を利用します。
※ アクションや条件は用意されていません。

Time() 式はパラメーターによって得られる値が変わります。
利用できるパラメーターは以下のとおりです。

year:1900年からの経過年数
mon:月(0オリジン)
mday:日
yday:年間通算日(1月1日=1)
wday:曜日(日曜=0)
hour:時
min:分
sec:秒
timestamp:タイムスタンプ(ミリ秒)

参考:Wiki の「式リファレンス」ページ

ちなみに「timestamp」以外は全て地方時(日本時間)の値が返されます。

さて、初っ端の「year」から面倒くさいことになっています。
Time("year") で返される値は 1900年からの経過年数なので、例えば 2021年なら 121 が返ってきます。うわめんどっw
しかもこの挙動は、既に非推奨となっている Javascript の Date.prototype.getYear() と同じです……😰大丈夫なん?
大丈夫でした。既に getFullYear() を使用していて、そこからわざわざ -1900 して返しています。(それもどーかとw)

続く「mon」も 0オリジン、つまり 1月が 0 で 2月 が 1 ……というアホっぷりです。
まあ、これは古いプログラミング言語ではよくあることなのですが、そんなことを GDevelop で再現する必要はないわけで……😢改善希望です。

それ以外は期待通りの値が返ってくるので、特に困ることもないかと思います。
(曜日は配列とか利用して希望する表記に変更しましょう)

しかし日付計算など、もう少し高度なことをしたい場合は、Javascript を利用したほうが良いですね。

使い方例1:テキストオブジェクトで日付を表示する

「2021年5月28日」という具合に表示したい場合は、次の画像のように設定します。

値には以下のように記述しています。

ToString(Time("year") + 1900) + "年" + ToString(Time("mon") + 1) + "月" + ToString(Time("mday")) + "日"

ポイントは、Time() 式は数値を返すので ToString() で囲って、文字列に変換している点と、「year」と「mon」の値を修正している点です。

使い方例2:配列を利用して曜日を表示する

Time("wday") は日曜日なら 0 という具合に数値を返します。

そこで↓こんな配列変数を用意すれば、

↓このようにすることで、数値を曜日に変えることができます。

値には以下のように記述しています。

VariableString(曜日[Time("wday")]) + "曜日"

ゲームを実行すると、「月曜日」とか「土曜日」とか表示されます。

参考:変数の動的アクセスについては Wiki のこのページの「子変数への動的アクセス」の項目を読んでください。

おしまい😆

コメント

このブログの人気の投稿

【GDevelop】セーブデータは暗号化しよう!

GDevelop の「イベント」を正しく理解しよう

GDevelop 5.3 がリリース!なので、ここ最近(2023年1月~2023年11月)の GDevelop バージョンアップまとめ