投稿

GDevelop v5.0.0-beta110 がリリースされました。

イメージ
問題の発見された beta109 を飛ばして GDevelop v5.0.0-beta110 がリリースされました。 今回も色々追加されたので、個人的に気になった更新内容をピックアップしてご紹介します! ✨ 新機能 ・ビットマップテキストオブジェクトの追加 新しく「ビットマップテキスト(Bitmap Text)」オブジェクトが、実験的なオブジェクトとして追加されました。 このオブジェクトを使用することで  BMFont や bmGlyph などのソフトウェアで生成された、ビットマップフォントを表示できるようになります。 ビットマップフォントは、デザインされた文字を予め画像として保存したものを利用するので、これまでは表現できなかった文字の装飾などが可能になります。 また、従来のテキストオブジェクトより描画にかかる負荷が軽く、頻繁に更新されるテキスト(例えばスコアなど)での利用に向いています。 対して画像なので、拡大すると画質は下がってしまう点と、用意していない文字は表示できない点に注意が必要です。 ・オブジェクトの中心が利用しやすくなりました オブジェクトの中心を取得したり、中心を利用して位置を指定するための、アクション、条件、および式が追加されました。 今までもスプライトオブジェクトは Point("Center") で Center 位置は取得できましたが、それ以外のオブジェクトの中心位置も簡単に取得できるようなりました。 また、中心位置を基準にした位置指定も可能になりました。 💝 改善点 ・衝突マスクエディタとポイントエディタを刷新 編集画面が大きく表示されるようになり、かなり使いやすくなりました! プレビューと設定欄の分割はドラッグすることができます。 ポイントにカーソルを合わせると、ツールチップにポイント名が表示されます。 ポイントや衝突マスクの頂点を画像より外側にドラッグしても、カーソルに追従し続けるようになりました。(衝突マスクは画像より外側には設定できません) 衝突マスクの設定欄を折りたためるようになりました。 スプライトの衝突マスクがたくさんある場合に便利です。 エディターの市松模様の背景も、選択したテーマに合わせて異なる色を使用するようになりました。 ・ビヘイビアの設定が折りたためるようになりました もぉビヘイビアをたくさ

【GDevelop】式の中に登場するオブジェクトは絞り込みの対象じゃないゾ!

イメージ
「 GDevelop の「イベント」を正しく理解しよう 」のページでも解説したように、GDevelop のイベントは、条件でオブジェクトの絞り込みをしてくれるのですが、実は絞り込まない場合もあるのです😅 それは、 オブジェクトが式の中に登場している場合 です。 ちなみに「式」とは、条件やアクションの入力画面で  や  が横にくっついてる欄に入力する文字とか数のあれですw(正確には文字列の場合は「文字列式」です) では早速、具体的な例を挙げてみましょう。 例えばこんなシーンが有ったとして↓ こんなイベントを組んだとします↓ 条件で GreyTank1 の X 座標が 480 より小さいかを判定しています。 一見すると、X 座標が 480 より小さい GreyTank1 に絞り込まれ、その条件を満たす左の二輌だけが削除されるように見えますが、実際には全ての GreyTank1 が削除されます。 (またはどの GreyTank1 も削除されません。理由は後記) なぜなら、ここで参照されている GreyTank1 が絞り込みの対象ではないためです。 実は使用している条件が「二つの数値を比べる」であり、GreyTank1 はその 式の中 で参照されています↓ そのため、GreyTank1 は絞り込みの対象では無いのです。 また、この条件の GreyTank1 とは、三輌あるうちの(GDevelop の内部的に)最初の一輌のみを指しています。 もし、その最初の一輌の X 座標が 480 より小さいなら、全ての GreyTank1 (絞り込まれていないため)が削除されるし、480 以上なら条件を満たしていないので、アクションが実行されることはありません。(つまりどの GreyTank1 も消えない) 上記の例では、条件「二つの数値を比べる」ではなく、オブジェクトがもつ条件「オブジェクトの X 位置を比べる」を利用すれば、絞り込まれるようになります↓ しかし、必ずしも希望する条件をオブジェクトが有しているとは限りません。 例えばオブジェクトのポイント位置(PointX() や PointY())を比較する条件は、今のところ用意されていません。 その場合は、条件「二つの数値を比べる」を利用することになりますが、その式に登場するオブジェクトは絞り込みの対象ではありません。 では、ど

GDevelop の条件とかアクションって何?どれのこと?

イメージ
GDevelop って「イベント」とか「条件」とか「アクション」とか、なんか用語が色々あってよく分からん! っという方のために、一発で分かる画像を用意しました。 ではどうぞご覧ください↓ つまり条件とアクションがセットになったものがイベントです。 条件の部分で設定した条件が満たされた場合に、アクションの部分で設定した処理が実行される、という仕組みです。 そう聞くと、プログラム経験者は「なるほど if 文だな完全に理解した」となりがちですが、残念ながらそれは間違いです😅 その点について詳しくは「 GDevelop の「イベント」を正しく理解しよう 」をご覧ください。

GDevelop プロジェクトのバックアップ方法

イメージ
最近は GDevelop エディターもかなり安定してきたので、プロジェクトファイルが壊れてしまうなんてことは、そうそう起こらなくなりましたが、念の為バックアップを取っておくにこしたことはありません。 そこで今回は、GDevelop のプロジェクト(ゲーム)のバックアップ方法を紹介します。 GDevelop プロジェクトのバックアップ方法 その1:まるごとバックアップ そもそもプロジェクトは 1 つのフォルダに収まっているはずです。 なので最も単純なバックアップは、そのフォルダごと複製する方法です😅 この方法であれば、複製した段階を忠実に再現できるため、なにかのファイルを壊してしまったり消してしまったときにも、復旧することができます。  反面、この方法ではリソース(画像とかサウンドとかの)ファイルもすべて複製されるので、大きなプロジェクトの場合は容量を食ってしまう上に、複製にも時間がかかったりします。 その2:プロジェクトファイルだけバックアップ プロジェクトファイルとは GDevelop でゲームを作成する際に生成される JSON ファイル(通常は game.json)です。 このプロジェクトファイルに、ゲームの内容が保存されています。 なので、このファイルを複製しておくだけでも、いちおうバックアップが取れていることになります。 もし、プロジェクトファイルが壊れてしまっても、複製しておいた game.json に差し替えれば、バックアップしたときの状態に戻ることができます。 ただし上記その1の方法とは異なり、リソースファイル、特に他のソフト(例えばダイアログツリーの Yarn やタイルマップの Tiled など)で生成したファイルが壊れてしまった場合には無力なので注意です。 その3:オンラインストレージを利用する 上記1と2とは根本的に異なる方法ですが、Dropbox や OneDrive、Google ドライブなどのオンラインストレージにある「バージョン履歴」機能を利用する方法です。 PC にオンラインストレージサービスのアプリをインストールし、プロジェクトのフォルダを同期させれば、あとは勝手にバックアップしてくれます。 この方法であれば、壊れたファイルだけ数日前のバージョンに戻すことも可能ですし、たとえ PC そのものが爆発炎上大破しても、データはクラウド上に

【GDevelop】テキストオブジェクトに追記するのはヤバいというお話

イメージ
スコアやステータスなどを表示したいときに便利なテキストオブジェクトですが、正しく利用しないと処理落ちの原因になったりするので注意が必要です。 そこで GDevelop のテキストオブジェクトに対し、どういう処理をすると負荷が高いかを実験してみました。 まず、テキストオブジェクトを 8 個用意し、次のようなイベントを実行してみます。 テキスト1 には普通に「あいうえおかきくけこ」を代入します。 テキスト2 には「あ~こ」までを 1 文字ずつ加算で追加します。 テキスト3 には大量のテキストを代入します。 テキスト4 には他とは違うフォントを設定しています。 テキスト5 にはテキスト1 と同じアクションを実行します。 テキスト6 にはテキスト1 と同じ文字数分、異なるテキストを代入します。 テキスト7 には大量のテキストを一度だけ代入します。 テキスト8 には一度だけ「あ~こ」までを 1 文字ずつ加算で追加します。 それを実行したプロファイラーの結果は、次のとおりです。 (プロファイラーの使い方や見方は、また別の記事を書きます😅) events セクション内の値を見ることで、それぞれのイベントにどれだけ時間(負荷)がかかったか分かります。 セクション名 時間(ms) % of parent % of total テキスト1 0.01ms 0.67% 0.67% テキスト2(加算で追記) 1.34ms 94.62% 73.09% テキスト3(多テキスト) 0.01ms 0.64% 0.50% テキスト4(違フォント) 0.00ms 0.11% 0.09% テキスト5(同テキスト1) 0.00ms 0.08% 0.06% テキスト6(違テキスト) 0.00ms 0.07% 0.06% テキスト7(一度・多) 0.00ms 0.03% 0.03% テキスト8(一度・加算) 0.01ms 0.59% 0.46% 注目すべき点は、加算で 1 文字ずつ追記した場合の負荷の高さです。 一度に大量のテキストを代入した場合と比べても、100 倍以上の負荷がかかっています😥 追記時に内部的にどのような処理がおこなわれているのかは知りませんが、おそらく文字数が変わるたびに、文字の形状か

GDevelop v5.0.0-beta108 がリリースされました。

イメージ
beta 106 がリリースされる前に 107 が発表されて、んじゃ 107 の記事を書くか~っと思っていたら 108 がリリースされたでござる😅 しかも、リリースに間に合うほど爆速で翻訳してくださった YU-TANG さんのおかげで、初めから新機能も日本語で利用できますぞー🙌 ということで今回は、beta 106 から 108 までの気になった変更点を、まとめてピックアップしました❗ ✨ 新機能 ・配列変数と真偽値変数が追加 全ての変数(グローバル、シーン、オブジェクト)で、従来の数値、文字列、構造体に加えて、配列と真偽値のタイプ(型)が利用できるようになりました。 真偽値は ON、OFF などに、配列は子変数の数が決まっていないデータや、増減するデータを持たせる事ができるので、とても便利です。 もちろん、配列と構造体は他のタイプを入れ子で持つことができるので、配列の子が構造体、なんてことも可能です。 特に配列は、個人的に待ち望んでいた機能なので、嬉しいです😊 ただし、現状は繰り返しイベントがシーン変数にしか対応していない点が残念です。 グローバル変数やオブジェクト変数を繰り返し処理したい場合は、シーン変数へコピーするか Javascript コードを使用する必要があります😥 ・トップダウン移動ビヘイビアを改善 「スティックコントロールをシミュレートする」アクションや「移動角度オフセット」プロパティが追加されて、より便利になったようです😆(よく分かってないw) ・オーディオに立体音響とプリロードの機能が追加 立体音響は距離による音量の減衰だけでなく、音がどの方向から鳴っているかを再現することができるようになります。(3D なので上下前後左右なのだとは思いますが、特に左右が分かりやすいです) ただし、なぜか位置を逆距離モデルという謎の割合で設定する必要があり、かなり使いにくい仕様となっています😥 Wiki の Spatial-sound ページ(英語) あと、プリロードされていないサウンドには効果がなかったり、再生前に位置を設定しようとすると落ちるバグが有るようです……😞 今後の改善に期待です。 プリロードの方は、読み込みが完了しているかを確認するすべは無いものの、使い方はアクションを追加するだけなので、簡単に利用できます。 あとアンロードもできます

【GDevelop】オブジェクト間の距離で音量を変化させる方法

イメージ
プレイヤーのキャラクターと音源との距離に合わせて、音量を変化させる方法を紹介します。 音のコントロールはページでは伝わりにくいので、まずは完成したサンプルの動画をご覧ください。 この動画では、ウサギとハチの距離に応じて、羽音の音量が変化します。 動画で使用したサンプルのシーンは、こんな感じ。 音を聞くウサギと、羽音の音源となるハチなどを配置しています。 使用素材: https://pixelfrog-assets.itch.io/ ウサギには「ドラッグ可能」ビヘイビアを追加して、ドラッグできるようにしています。 また、ウサギとハチは使用した素材が小さかったので 2 倍に拡大しています。 (プロパティのカスタムサイズで大きくしています) シーンにはその他に、デバッグ用のテキストオブジェクトも配置しています。 イベントは次の画像のようになっています。 では、一行ずつ順に説明していきます。 まず最初の行で、シーン開始時にチャンネル 1 でサウンド(羽音)をループ再生しています。 その再生アクションのパラメーターは、次の画像のとおりです。 今回のように再生するサウンドを細かく制御したい時は、チャンネルを指定できる「チャンネルでサウンドを再生する」または「チャンネルで音楽ファイルを再生する」を使用する必要があります。 チャンネル識別子を指定することで、後々そのサウンドをアクションで制御できるようになります。 (ここでいうチャンネルとは単なる識別用の番号であり、好きな数字を入れることができます) そして 2 行目のイベントで、ウサギとハチの距離に応じて、チャンネル 1 の音量を変化させています。 そのアクションのパラメーターは、次の画像のとおりです。 チャンネル識別子には、シーン開始時のアクションで指定した値の 1 を指定します。 その上で、ウサギとハチの距離に応じて 0~100 の数値を代入しています。 このアクションのポイントは、値パラメーターに入力されている何やら小難しい式です。 clamp( 100 - (Bunny.Distance(Bee) * 0.3) , 0 , 100 ) ↑と、書かれています。 (説明のため色分けしました) では、まず clamp() 関数についてです。 この関数は、ある数値を指定した範囲内に制限することができます。 次のように使います。 c