**This is an old revision of the document!**

コインの表示とゲットしたコインの表示

これは プラットフォーム型ゲームの作成のチュートリアルの一部です。 ですが、他のゲームにも参考になります!

これまでに作成したゲームでは、プレーヤーは何もすることがありません。プレーヤーがコインをゲットできるように追加しましょう。

コインの追加

金色のコイン画像を使って、新しいスプライトオブジェクトを作成することから始めます。

このオブジェクトは「コイン」という名前にします。

ステージに複数のコインを配置することができます。いくつかのコインが必要になるので、シーンエディターの「ドラッグ・アンド・クローン」機能を使用することをお勧めします。コインを選択し、Ctrl(またはmacOSではCmd)を押したまま、コインをドラッグします。これにより複製されます。

Shiftキーを押しながら移動すると、元の軸と同じ軸に作成されたコインを移動することもできます。

集めたコインの削除

プレイヤーがそれらに触れたときにコインオブジェクトを破壊しましょう。新しいイベントを追加し、条件を追加します。2つのオブジェクト間の衝突をテストする条件を選択します。最初のオブジェクトは「Player」、2番目のオブジェクトは「コイン」にする必要があります。

次に、コインを削除するアクションを追加できます。最初の条件で選択された「コイン」オブジェクトのみがアクションで使用されるため、プレーヤーと衝突していたコインのみが削除されます。

「全てのオブジェクトに共通のアクション」>「オブジェクト」から、「カテゴリの削除」アクション選択し、削除するオブジェクトとして「コイン」を入力します。

イベントは次のようになります。

プレビューを起動して、プレイヤーがコインの上を通過するとコインが削除されることを確認できます!

コインをゲットした時に効果音を鳴らす

ゲームを、よりダイナミックでやりがいのあるものにするために、コインをゲットしたときにサウンドを再生しましょう。

簡単です。すでにcoin.wavゲームフォルダーにサウンドファイルがあります(そうでない場合は、ここからリソースをダウンロードして、ゲームフォルダーに展開します。)

これまでに行ったことのないことです。1つのイベントに実行する複数のアクションを追加できます。サウンドを再生するには、コインを削除するために使用したイベントに別のアクションを追加しましょう。[オブジェクト コインの削除]アクションのすぐ下にある[アクションの追加]をクリックし、オーディオカテゴリから、「サウンドを再生」というアクションを追加します。この方法では、コインを削除するだけでなく、サウンドも再生します。

サウンドを再生するために使用できるパラメーター類があります。最初で最も重要なのは、再生するサウンドファイルです。フィールドをクリックし、「新しいオーディオファイルを選択」をクリックします。

ゲームフォルダーに入っている、他とファイルとともにダウンロードした、「coin.wav」ファイルを選択します。

他のパラメーターはそのままにします(例えば、サウンドをリピートしたり、音量100をを変更したり、デフォルト速度を変更しないで下さい。)

これで全てです!プレビューを起動すると、コインをゲットするたびにサウンドが再生されます 👍

変数を使用してスコアを計算

変数を使用して、プレーヤーのスコアを更新および記憶します。

変数は、数値や文字列(テキスト)などの特定の情報を保存および記憶するために使用できる保存場所です。GDevelopには、さまざまなタイプの変数があります。

  • Object 変数 オブジェクトの各インスタンスに固有のプライベート変数です。これは、各インスタンスが他のインスタンスと共有されることなく、独自の値を保存できることを意味します。たとえば、各敵の残機数を変更する場合等に役立ちます。
  • Scene 変数 (最も使用されるもの)は、シーンに付加された変数です。これは、それらの値がゲーム内の他のシーンと共有されないことを意味します。現在再生されているシーンにのみ関連する情報を保存すると便利です。たとえば、プレーヤーの残機数やスコア。
  • Global 変数 値はゲーム全体のすべてのシーンで共有されます。弾丸の量やプレーヤーが持っているお金の量など、すべてのシーン間で共有したい情報を保存したい場合に便利です。

今回使用しようとする変数はシーン変数であり、「スコア」と呼ばれます。

作成した最新のイベントにアクションを追加しましょう。アクションを選択し、「変数」 > 「変数の値」を選択します。このアクションは、スコア変数に100を追加するために使用されるため、次のようにパラメーターを入力します。

GDevelopでは、変数を使用する前に変数を宣言する必要はありません。アクションまたは条件で名前を付けるだけで、変数を宣言せずに使用できます。宣言されていない変数でアクションを使用している場合、GDevelopは変数のアクションを実行した後、トラブルを防ぐためにデフォルト値「0」(または空のテキスト)で自動的に作成します。

しかし、ゲームをより良く編成するには、変数を使用する前に変数を宣言することをお勧めします。このようにして、ゲームで使用している変数を簡単に見つけることができます。デフォルト値を0以外に変更することもできます。変数を宣言するに…は、変数名の右側にあるボタン「…」をクリックします。これにより、変数のリストが表示されます。

変数はまだ宣言されていないため、リストが表示されますが、空になっています。

「+」ボタンを クリックして変数を追加し、名前に「スコア」と入力します。

これは完全にオプションでですが、良い習慣であることと思って下さい。

テキストオブジェクトを使用してスコアを表示

Add text object

For now, the variable Score can't be seen so we can't verify that the score is increased (we could, using the Debugger, but the player can't see it).

We need to use a Text object to display the value of the Score variable. Let's add a new object. This time choose Text when asked about which type of object to create:

Change then the object properties so that the text is black and bigger than the default size:

You can then place the object on the scene:

Changing the text layer

If you launch the game, you can see that the Score text is displayed with the rest of the objects and its position is not fixed on the screen. We can easily solve this problem by using a layer on top of the base layer. Open the layer editor using this button:

The list of layers is shown, with only the base layer for now:

Click on the + button to add a layer. Enter “UI” for its name (UI stand for User Interface).

Finally, move the text object to this new layer by selecting the text instance on the scene and in the properties on the left, select the UI layer:

Make sure that the object is displayed somewhere visible on the screen, for example, put it on the top-left. The black rectangle on the scene editor represents the size of the window:

Display the score value

Now that we have a text on our screen, it is time to make it display the value of the Score variable. Add a new event. This event won't have any condition, meaning the action is going to be executed every single time a frame of the game is rendered on screen (about 60 times a second).

Add an action and choose the one in Text Object category called Modify the text.

For the first parameter, choose the Score object, as it is this object that we want to update. For the second parameter, choose = (set to) operator (we want to set the text to a new value). Finally, the last parameter represents the new content of the text. It's a string expression that will be evaluated during the game by GDevelop when the action is run.

We can specify a text by writing it between quotes (like this: "Hello World"). But we can also use something called expressions. An expression is a function that is returning a certain value. In this case, we need the value of the Score variable and we want to use that value to update the content of the Text object. Expressions are a more advanced topic so we won't go deep into it for now.

What you need to know for now is that in order to get the value of a scene variable, we need to use the expression Variable(variableName). And as it is a number variable but we need the value as a text, we need to convert the value returned from this expression to a string. We can do that by using another expression called ToString(valueToConvert). So the actual expression needs to look like this ToString(Variable(Score)).

Finally, we can add this expression after a static text using the + operator: "Score : " + ToString(Variable(Score)) (note the double quotes surrounding the text).

Lots of other functions and expressions are available in GDevelop. When combined, you create powerful actions that do advanced work. You can find more expressions in the expression editor by clicking on the blue icon next to the value fields:

Here is the final event:

You can preview the game, see that the score is shown and updated when you collect a coin!

Bonus: making sure that collecting two coins at the same time works

You might have noticed that if you collect two coins at the exact same time (for example, if two coins overlap), the score is only increased once. For example, if each coin is worth 100 points and you collect 2 coins, the score will only go up to 100 instead of 200. The fix for this is easy and is something we haven't looked at yet: we're going to use an event called For Each Object. What we will do is tell the engine that for every single coin that was collected, add 100 to the score.

To start, click the + button in the toolbar of the Events Editor:

Select “for each object”:

This will add an event at the bottom of the event page. Drag it up and make it a sub-event of the player collision with the coin:

Click to choose an object, and choose the Coin object.

Now that you've added the object to the sub-event, let's move the actions down to the sub-event (so that the actions will be repeated for each coin that is picked by conditions).

Hover over the first action, right-click and cut it, then hover over the action in the sub-event, right-click, and paste. Do this for the other two actions. You can also drag'n'drop actions, which is faster than cut-pasting them.

This is what the final event should look like:

Now run the game, and you will see that if you gather two coins at the same time, the score will be updated properly if you run on two coins at the exact same time.

Next step: add enemies

Every platform game comes with enemies that you have to avoid or kill by jumping on them! Let's add some and see how we can make them move.

➡️ Read Add enemies to your platformer game!