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

JavaScriptコードイベント

このイベントを使用すると、ゲームにカスタムJavaScriptコードを追加できます。JavaScriptプログラミングに精通した上級ユーザーのみが使用することを意図しています。

JavaScriptイベントを追加するには、イベントシートツールバーの[+]ボタンをクリックし、JavaScriptコードを選択します。

追加したら、コードをクリックして編集します。GDevelopがイベントに到達するたびにコードが実行されます。

コードでは、runtimeSceneという名前の変数にアクセスできることに注意してください。変数runtimeSceneは、再生されているシーンを表します。以下は、標準のGDevelopイベントと、JavaScriptを使用するのと同等のイベントの例です。

runtimeSceneパラメーターの横にある「ここをクリックしてJavascriptに渡すオブジェクトを選択」をクリックすると、「objects」という配列変数が使用可能になります。ゲームオブジェクトのメニューが表示されます。選択したゲームオブジェクトを選択できます。そのオブジェクトは、javascriptオブジェクト配列に追加されます。

「オブジェクト」は、選択したオブジェクトの選択されたインスタンスを含む配列です。アクションまたは条件が使用するものとまったく同じです。たとえば、次の図は、JavaScriptイベントをサブイベントとして使用するイベントです。javascriptイベントは、プレーヤーと衝突している敵を操作します。

参考資料 📚

コードサンプル

変数の値を読み取って変更する

var myVar = runtimeScene.getVariables().get("MyVar");
var myVar2 = runtimeScene.getVariables().get("MyVar2");
 
var currentValue = myVar.getAsNumber();
myVar.setNumber(currentValue+1);
 
myVar2.setString("Hello, world");

gdjs.Variablegdjs.VariablesContainerを参照して下さい。

オブジェクトを別の位置に移動し、ゲームが最初のフレームをレンダリングしているかどうかを確認します

const players = runtimeScene.getObjects("Player");
const playerHitBoxes = runtimeScene.getObjects("PlayerHitBox");
if (playerHitBoxes.length === 0 || players.length === 0) return;
 
if (runtimeScene.getTimeManager().isFirstFrame()) {
  playerHitBoxes[0].hide();
}
 
players[0].setX(playerHitBoxes[0].getX() - 12);
players[0].setY(playerHitBoxes[0].getY());

同等のイベントは次のとおりです

オブジェクトの動作に関するいくつかの条件に従ってアニメーションを変更する

以下のコードでは、注釈と呼ばれるコメントを使用しています

JavaScriptで変数の宣言の直前に注釈を 記述することにより/ @type {gdjs.XXX} */、変数の型がgdjs.XXXであることをコードエディターに知らせます。エディターは、入力中(または単語にカーソルを合わせたとき)にオートコンプリートを提供することで、ユーザーを支援できます。 ほとんどの場合、注釈は必要ありません。使用している方法は documented によって型アノテーションに適合します。しかし、このオブジェクト固有のメソッド(スプライトオブジェクトのアニメーションを変更するメソッドなど)にアクセスする必要があります。例えば、次のように書く場合です /** @type {gdjs.SpriteRuntimeObject} */ これを行わなくてもコードは機能しますが、エディターはgdjs.RuntimeObjectのメソッドのみを提供できます。 (基本クラス) オブジェクトからビヘイビアーを取得するとき、どのようなビヘイビアーを取得しているかもわかります。注釈を使用してこれをエディターに知らせてください(そうでなければ、gdjs.RuntimeBehaviorの基本クラスのオートコンプリートのみを取得します。). <code javascript> const players = runtimeScene.getObjects(“Player”); const playerHitBoxes = runtimeScene.getObjects(“PlayerHitBox”); if (playerHitBoxes.length === 0 || players.length === 0) return; / @type {gdjs.SpriteRuntimeObject} */ const player = players[0];

/ @type {gdjs.PlatformerObjectRuntimeBehavior} */ const platformerBehavior = playerHitBoxes[0].getBehavior(“PlatformerObject”); if (platformerBehavior.isJumping() || platformerBehavior.isFalling()) { player.setAnimation(1); } else if (platformerBehavior.isOnFloor()) { if (!platformerBehavior.isMoving()) { player.setAnimation(0); } else { player.setAnimation(2); } } var LEFTKEY = 37; var RIGHTKEY = 39; if (runtimeScene.getGame().getInputManager().isKeyPressed(LEFTKEY)) { player.flipX(true); } else if (runtimeScene.getGame().getInputManager().isKeyPressed(RIGHTKEY)) { player.flipX(false); } </code> 同等のイベントは次のとおりです。 ### カメラの位置をオブジェクトの位置に設定します <code javascript> if (!objects.length) return; Here, “objects” refer to a list of “Player”, which should be selected in the configuration of the function. runtimeScene.getLayer(“”).setCameraX(objects[0].getX()); </code> 同等のイベントは次のとおりです。 ### スプライトオブジェクトが床に置かれた後にフェードアウトする(プラットフォームオブジェクトのビヘイビアーを使用) <code javascript> objects.forEach(object ⇒ { / @type {gdjs.SpriteRuntimeObject} */

const enemy = object;
/** @type {gdjs.PlatformerObjectRuntimeBehavior} */
const platformerBehavior = object.getBehavior("PlatformerObject");
if (enemy.getAnimation() === 1 && platformerBehavior.isOnFloor() && !platformerBehavior.isMoving()) {
    object.activateBehavior("PlatformerObject", false);
    enemy.setOpacity(enemy.getOpacity() - 50 * object.getElapsedTime(runtimeScene) / 1000);
    if (enemy.getOpacity() === 0) {
        object.deleteFromScene(runtimeScene);
    }
}

}); </code>

同等のイベントは次のとおりです。