Drawイベントについて


Game Maker Language リファレンス > 組み込み関数 用途別 > 2D グラフィック機能 > Drawイベントについて

Drawイベントについて

Editor_Objects_Draw.png


Drawイベントカテゴリは、ゲームを実行したときに画面に表示されるものを制御するすべてのイベントを持つカテゴリです。 ゲームのさまざまな描画要件を適切に処理するために、さまざまなイベントに分割されています。下の画像は、各イベントが実行される順序を示しています。

DrawEvent.png

通常の Drawイベント は、描画開始(Draw Begin)、標準描画(Draw)、描画終了(Draw End)の3つのサブタイプに分類されます。 一般に、標準の Drawイベント を使用するだけでよく、ルーム内のすべてのインスタンスがこのイベントをゲームの各ステップでトリガーするので、インスタンスが可視である限り、このイベントは常に呼び出されます。 フラグは true に設定されています。 オブジェクトのプロパティでこのサブイベントに何も定義していなくても(つまり、コードもアクションもない)、オブジェクトにスプライトが割り当てられている場合は、トリガーされる Draw イベント がまだあることを理解することが重要です。 これは、GameMaker Studio 2 には Drawイベントで描画する方法が2つあるためです。

  • デフォルトの描画:これは、オブジェクトプロパティでスプライトを定義し、通常の Draw イベント にアクションやコードを配置しない場合です。この場合、GameMaker Studio 2は割り当てられたスプライトを自動的に描画します。 画像のスケール、インデックス、ブレンディングなどを変更するために他のイベントで実行する変換は、Draw イベント が空である限り反映されます
  • カスタム描画:これは、Drawイベント にコードまたはアクションを配置するときです。 これは、GameMaker Studio 2に「このオブジェクトのインスタンスに対して描画するものを制御したい」と伝えており、デフォルトの描画を完全に上書きします。 つまり、たとえば、スプライトが割り当てられたオブジェクトを作成し、drawイベントを設定してテキストを描画すると、画面上にテキストが描画されますが、GameMaker Studio 2に指示していないため、スプライトは描画されません。 テキストとともに描画します

残りの Draw イベント については、以下のセクションで説明します。

Draw Begin と Draw End

メインのDrawイベントの他に、Draw BeginイベントとDraw Endイベントもあります。これらは、標準のDrawイベントとまったく同じように動作します(つまり、ゲームのすべてのステップで、すべてのビューポートに対して、何を入れても何でも描画します)。ただし、明示的に追加されていない場合、「デフォルトの描画」は行われません。オブジェクト、それらは常に標準のDrawイベントの前/後に実行されます。したがって、ゲームの実行中は、常にすべてのインスタンスのDraw Beginイベントがあり、次にすべてのインスタンスのDrawイベントがあり、最後にすべてのインスタンスのDraw Endイベントがあります。

このようにして、1つのインスタンスのDraw Beginステップで描画または描画プロパティを設定し、標準の Drawイベント または Draw Endイベント を持つすべてのインスタンスがこれらのプロパティを使用するか、最初のインスタンスが描画したものの上に描画するようにします。基本的に、Begin Stepイベント と End Stepイベント のように、特定のものが特定の時間に描画されることを保証する確実な方法です。

GameMaker Studio 2で描画するときに注意すべき点がいくつかあります。それが、描画しているスプライト、シェーダー、3Dバッファーのいずれであってもです。

  • Draw イベント は非常に集中的なイベントであり、ほとんどの時間とリソースを消費するイベントの1つです...そのため、描画以外の Draw イベント で何かを行うことは決して良いことではありません。 したがって、Stepイベント、Alarms、またはその他のイベントに適合する大規模なコードまたは複雑なアクションを保存しますが、Draw イベント が明確になるようにしておきます
  • オブジェクトのvisibleパラメータがオフに設定されている場合(オブジェクトのインスタンスが描画されないようにするため)、すべての Drawイベント はスキップされます(Resizeイベントを除く)。 つまり、インスタンスを非表示にすると、これらのイベントのいずれかに配置されたすべてのコードが実行されなくなります。したがって、表示されない場合は、Drawイベント に重要なコードを配置しないでください
  • 描画するものは、オブジェクトのプロパティとオブジェクトに与えられたスプライト(またはマスク)によって定義されるため、選択する衝突エンジン(従来または物理)とは何の関係もありません

Draw GUI

Draw GUIイベントタイプはDraw Eventカテゴリに分類され、特にビューカメラのスケールや回転の影響を受けないGUI要素を描画するために設計されています。これは、部屋内のインスタンスの位置や現在のカメラビューの位置に要素のすべての配置を基にする必要なく、HUDまたはユーザーインターフェイスのすべての要素をインスタンスに描画できることを意味します。

これらのイベントで描画するときは、カメラビューがアクティブであり、(0,0)が常にアプリケーションサーフェスまたはディスプレイの左上隅であっても、描画座標は変化しないことを理解することが重要です(次の注を参照)このセクションの下部)、およびデフォルトの幅と高さは、アプリケーションサーフェスに対して1:1です。Draw GUI Beginイベント が最初にすべてのインスタンスを描画するため、異なるレイヤーの異なるインスタンス間(上位レイヤーのインスタンスは下位レイヤーのインスタンスの下に描画されます)とイベント自体の内部でも深度の順序は維持されます。標準の Draw GUI はその上のすべてのインスタンスに対して描画し、最後に Draw Gui Endイベント がトリガーされます。

このようにして、Draw GUI で物事を描画したり、描画プロパティを1つのインスタンスで開始したり、標準の Draw GUIイベント または Draw GUI Endイベント を持つすべてのインスタンスがこれらのプロパティを使用したり、最初のインスタンスが描画したものの上に描画したりできます。基本的に、これは、Begin Stepイベント と End Stepイベント のように、特定のものが特定の時間に描画されることを保証する確実な方法です。

これらのイベントは、通常の Drawイベント と組み合わせて使用することもできます(通常のカメラビューの位置、スケール、回転の影響を受けます)。 Drawイベント はないがDraw GUIイベント はある場合でも、GameMaker Studio 2はデフォルトでインスタンスにスプライトを描画します(それがある場合)。

他の Drawイベント に関連して、DRAW GUI イベント は常に、通常の Drawイベント で描画されたものの上に描画されます。したがって、Draw GUIイベント を使用して下位レイヤーにインスタンスがある場合、通常の Drawイベント を使用して上位レイヤーにあるインスタンスの上に描画されます。両方のインスタンスに Draw GUIイベント がある場合、レイヤーの順序が考慮されます。

注意
このイベントは、デフォルトで、通常は部屋またはビューポートのサイズであるアプリケーションサーフェスサイズで "1 : 1" で描画します。 これは、ゲームオプションでアスペクト比補正をオンにすると、ゲームを「レターボックス化」する黒いバーの上にGUIが描画されないことを意味します。 この動作は、display_set_gui_maximise() 関数を使用してオフに切り替えることができます。また、関数 display_set_gui_size() を使用して、GUIイベントを特定のサイズにロックし、これをスケーリングして、ディスプレイまたはアプリケーションの表面の寸法に自動的に合わせることができます

Pre Draw と Post Draw

Pre Draw イベントと Post Drawイベントは、Drawイベントカテゴリの一部です。 ただし、他のDrawイベントとは異なり、これらは表示バッファーに直接描画されます。これは、現在表示されているすべてのビューポートの合計スクリーンスペースのサイズ、またはビューポートを1つだけ使用するかまったく使用しない場合のウィンドウサイズになります。 以下の画像はこれを示しています:

Editor_Object_PostDraw.png


したがって、PreまたはPostの Drawイベント を使用している場合は、全画面のレンダーターゲット(表示バッファー)に描画します。これは、すべてのビューポートを合わせるウィンドウと同じサイズになります。アクティブなビューポートがない場合、これは代わりにウィンドウ自体のサイズに設定されます。

Pre Draw イベント は他の Draw イベント の前にトリガーされ、その中で値を設定したり、描画プロパティを設定したり、ビューポートやGUIレイヤーのサイズを気にすることなく描画したりできます(GUIレイヤーのサイズは、画面バッファですが、GUI解像度をコードで設定できるため、そうでない場合があります。

このイベントは、通常の描画で表示バッファがクリアされる前に発生することに注意してください。つまり、ルームエディタでビューのクリアをオフにしないと、最初のビューポート描画として、Pre Drawイベント で描画されたものは何も表示されません。クリアします。ビューポート自体を透視できるようにする場合、またはビューポートをまったく使用しない場合は、ルームエディタで背景色をアルファ0に設定する必要もあります。

注意
これらのオプションをオフにすると、ゲームのテスト時に画面に不要なアーティファクトが描画される場合があります(インスタンスからの「トレイル」など)。これは、クリアされずにディスプレイバッファーの前のフレームを直接描画しているためです。ただし、draw_clear_alpha() を使用して、これを自分で行うことができます

Draw End イベント は、すべての標準 Draw イベント の後で、Draw GUI イベント の前にトリガーされます。Post Draw イベント と同様に、表示バッファのサイズに基づいており、Draw GUI イベント の前に配置されるため、HUDに干渉することなく、後処理効果やその他のもの(HUD や GUI)を全画面ベースで簡単かつ簡単に実行できます。

ウィンドウのリサイズ

このイベントタイプはDraw Eventカテゴリに分類され、実際には何も描画しませんが、ディスプレイバッファーの変化に反応します。具体的には、ゲームウィンドウのUWPディスプレイバッファーサイズの変化に反応するように設計されています。 「スナップ」されます。

UWPターゲットプラットフォームでは、ゲームウィンドウの「スナップ」(たとえば、ユーザーがウィンドウをディスプレイの横にドラッグしたとき)からディスプレイバッファーのサイズ変更をキャッチすることが重要です。 このイベントはそれだけを行い、ウィンドウが変更されるたびにトリガーされ、必要に応じてビューのサイズを変更したり、HUD要素を再配置したりするカスタムコードをここに追加できます。 この関数は、これらのことを常にチェックするステップイベントコードを回避するための便利な方法として提供されています。

注意
このイベントでは描画できません! これは、ウィンドウのサイズを変更することによってトリガーされ、この変更をキャッチするためだけです...実行する必要がある描画は、他の Draw イベント のいずれかにある必要があります。

Wiki内検索

#search(): You already view a search box

MENU

ドキュメント

GMLリファレンス

2ch

その他



最新の30件

2024-03-07 2023-08-09 2023-05-21 2023-05-20 2023-05-04 2022-10-13 2022-07-21 2022-07-02 2022-04-06 2021-11-30 2021-11-26 2021-10-03 2021-09-23 2021-08-15 2021-06-02 2021-01-23 2021-01-21 2021-01-19 2021-01-18 2021-01-16 2021-01-15

人気の10件

今日の10件



これまでの訪問者: 2579
今日の訪問者: 1
昨日の訪問者: 5
閲覧者: 7