mcpField
G
gamemaker-expert

gamemaker-expert

github.com/leihaht開発654 回インストール52 週間前に更新
リポジトリ

gamemaker-expert について

GameMaker Studio 2 と GML の開発を支援するスキルです。オブジェクトやリソースの作成、言語仕様、設計、トラブルシューティングを扱い、ゲームの開発や保守に利用できます。詳細な確認先として公式マニュアルも案内します。

主な機能

  1. 01オブジェクト、イベント、リソース作成の案内
  2. 02GML の構文とデータ構造の解説
  3. 03設計パターンと落とし穴の参考情報
  4. 04メモリ管理とファイル処理を網羅
  5. 05公式マニュアルの参照を案内

活用シーン

  1. 01GameMaker のオブジェクトやスクリプトを作成・編集
  2. 02コンパイルエラーや実行時の問題を調査
  3. 03衝突判定、描画、ネットワーク機能を実装
  4. 04プロジェクト構成やパフォーマンスを改善

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/leihaht/gamemaker-skills --skill gamemaker-expert

インストール後、Claude Code で/gamemaker-expertを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
ADVANCED_TOPICS.md
ARCHITECTURE_PATTERNS.md
BUILT_IN_VARIABLES.md
COMMON_PITFALLS.md
GML_REFERENCE.md
MANAGER_CONSTRUCTOR_GUIDE.md
QUICK_REFERENCE.md

詳細

GameMaker エキスパート

概要

このスキルでは、あらゆる GameMaker プロジェクトに役立つ、GameMaker Studio 2 と GML(GameMaker Language)の包括的な専門知識を提供します。基本的なオブジェクトの作成から、シェーダープログラミング、ネットワーク、プラットフォーム固有の開発などの高度なトピックまでを網羅しています。

このスキルを使用する場面:

  • .gml ファイル(GML スクリプトとイベント)を扱うとき
  • .yy ファイル(オブジェクト定義、スプライト定義など)を作成または変更するとき
  • .yyp プロジェクトファイルを編集するとき
  • GameMaker のオブジェクト、スクリプト、アセットを作成するとき
  • GameMaker のコンパイルエラーや実行時の問題をデバッグするとき
  • GameMaker の機能(描画、衝突、ネットワークなど)を実装するとき
  • GameMaker のパフォーマンスを最適化するとき
  • GameMaker Studio 2 の開発タスク全般

GameMaker 公式マニュアル

主な参照先:包括的で最新のドキュメントを確認するには、必ず GameMaker 公式マニュアルを参照してください。 https://manual.gamemaker.io/monthly/en/

マニュアルの主なセクション

公式マニュアルを使用する場面:

  • 関数のシグネチャとパラメーターを調べるとき
  • プラットフォーム固有の動作を理解するとき
  • IDE のバージョンにおける最新の構文変更を確認するとき
  • GameMaker の機能について詳しく調べるとき
追加の参考資料

高度なアーキテクチャ設計の指針:

  • アーキテクチャパターン:references/ARCHITECTURE_PATTERNS.md
    • GameMaker 固有のパターン(サービスロケーター、コマンドパターン、イベント駆動フロー)
    • GML に応用した SOLID 原則
    • マネージャーコンストラクターを使ったカプセル化パターン
    • パフォーマンスパターンとアンチパターン
  • マネージャーコンストラクターガイド:references/MANAGER_CONSTRUCTOR_GUIDE.md
    • マネージャーコンストラクターの作成手順
    • パブリック API の設計パターン
    • 下位互換性のための参照公開パターン
    • クリーンアップの責務とテスト戦略
  • 組み込み変数:references/BUILT_IN_VARIABLES.md
    • GameMaker の予約変数一覧
    • 位置、スプライト、物理演算、パス、タイムラインのカテゴリ
    • 非推奨のグローバル変数(health、score、lives)
    • 安全な代替手段と検証チェックリスト
  • GML リファレンス:references/GML_REFERENCE.md
    • 言語構文、演算子、データ型
  • よくある落とし穴:references/COMMON_PITFALLS.md
    • よくある間違いとその解決策
  • クイックリファレンス:references/QUICK_REFERENCE.md
    • よく使うパターンのチートシート

これらの参考資料を使用する場面:

  • ゲーム全体の状態を管理するマネージャーコンストラクターを設計するとき
  • GameMaker の組み込み変数との競合を避けるとき
  • GML でカプセル化パターンを実装するとき
  • 疑似プライベートメンバーに使う __ プレフィックスの慣例を理解するとき
  • GameMaker の文脈で SOLID 原則を学ぶとき
  • 保守しやすいコードのアーキテクチャパターンを探すとき

GameMaker の主要なワークフロー

オブジェクト作成のワークフロー(重要)

GameMaker オブジェクトを作成するには、4 つの手順をすべて完了する必要があります。いずれかの手順を省略すると、オブジェクトが IDE に表示されなかったり、コンパイルに失敗したりします。

手順 1:オブジェクトのディレクトリを作成する
objects/objYourObjectName/

命名規則:

  • obj プレフィックスで始める
  • PascalCase を使用する(例:objPlayer、objEnemyMelee、objInventoryUI)
  • 目的を示すわかりやすい名前にする
手順 2:イベントファイルを作成する

オブジェクトで必要な各イベントに .gml ファイルを作成します。

一般的なイベント:

イベントファイルイベントタイプ使用するタイミング
Create_0.gml作成イベント変数を初期化する(必ず含める)
Step_0.gmlステップイベント毎フレーム、ロジックを更新する
Draw_0.gml描画イベントゲーム内のグラフィックを描画する
Draw_64.gmlGUI 描画イベントUI オーバーレイを描画する
Destroy_0.gml破棄イベント破棄時にクリーンアップする
Collision_objX.gml衝突イベント衝突を処理する

イベントの命名規則:

  • 作成:Create_0.gml
  • ステップ:Step_0.gml
  • 描画:Draw_0.gml
  • GUI 描画:Draw_64.gml(Draw_GUI_0.gmlではありません!)
  • 衝突:Collision_objTargetName.gml

Create_0.gml の例:

/// objPlayer Create Event
// Initialize player variables

// Movement
move_speed = 4;
direction = 0;

// Stats
health = 100;
max_health = 100;

// State
is_moving = false;

show_debug_message("objPlayer created");
手順 3:.yy ファイルを作成する(必須)

ファイル:objects/objYourObjectName/objYourObjectName.yy

テンプレート:

{
  "$GMObject":"",
  "%Name":"objYourObjectName",
  "eventList":[
    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
  ],
  "managed":true,
  "name":"objYourObjectName",
  "overriddenProperties":[],
  "parent":{
    "name":"Objects",
    "path":"folders/Objects.yy",
  },
  "parentObjectId":null,
  "persistent":false,
  "physicsAngularDamping":0.1,
  "physicsDensity":0.5,
  "physicsFriction":0.2,
  "physicsGroup":1,
  "physicsKinematic":false,
  "physicsLinearDamping":0.1,
  "physicsObject":false,
  "physicsRestitution":0.1,
  "physicsSensor":false,
  "physicsShape":1,
  "physicsShapePoints":[],
  "physicsStartAwake":true,
  "properties":[],
  "resourceType":"GMObject",
  "resourceVersion":"2.0",
  "solid":false,
  "spriteId":null,
  "spriteMaskId":null,
  "visible":true,
}

イベントタイプ番号:

イベントeventTypeeventNum
作成00
ステップ30
描画80
GUI 描画864
破棄10

重要なフィールド:

  • %Name と name:オブジェクト名と完全に一致させる必要があります
  • eventList:作成した各 .gml ファイルのエントリを含めます
  • parentObjectId:継承を使用する場合は、親オブジェクトのリソースパスを設定します(例:{"name":"objCreature","path":"objects/objCreature/objCreature.yy"})
  • persistent:オブジェクトをルーム間で維持する場合は true に設定します
  • visible:スプライトを持たないコントローラーオブジェクトの場合は false に設定します
手順 4:プロジェクトファイルに登録する(必須)

ファイル:YourProject.yyp

場所:"resources":[ 配列を探します

エントリを追加する(アルファベット順):

{"id":{"name":"objYourObjectName","path":"objects/objYourObjectName/objYourObjectName.yy",},},

例:

"resources":[
  {"id":{"name":"objInventoryUI","path":"objects/objInventoryUI/objInventoryUI.yy",},},
  {"id":{"name":"objPlayer","path":"objects/objPlayer/objPlayer.yy",},},
  {"id":{"name":"objYourObjectName","path":"objects/objYourObjectName/objYourObjectName.yy",},},
]

重要:この手順を省略すると、「object not found」などのコンパイルエラーが発生します。

GML 言語の基本
変数のスコープ
// Local variable (function/script scope only)
var _local_var = 100;

// Instance variable (attached to object instance)
instance_var = 50;

// Global variable (accessible everywhere)
global.game_state = "playing";

ベストプラクティス:わかりやすくするため、ローカル変数名の先頭にアンダースコア _ を付けます。

データ型
  • Real:数値 var _x = 100; var _pi = 3.14159;
  • String:テキスト var _name = "Player";
  • Boolean:真/偽 var _is_alive = true;
  • Array:var _items = [1, 2, 3]; var _nested = [[1,2], [3,4]];
  • Struct:var _player = { x: 0, y: 0, health: 100 };
  • Undefined:undefined(is_undefined() で確認します)
  • ポインター/ID:インスタンス、データ構造、アセットへの参照
演算子

算術:+ - * / div mod 比較:== != > < >= <= 論理:&& || ! ^^ (and, or, not, xor) ビット演算:& | ^ << >> ~ 三項演算子:condition ? true_value : false_value

重要 - 三項演算子の連結:

三項演算子を連結する場合、ネストされた条件は必ず二重かっこで囲む必要があります。

// ✅ CORRECT
var _result = condition_a ? "foo" : ((condition_b ? "bar" : "baz"));

// ❌ WRONG (will cause compile error in some versions)
var _result = condition_a ? "foo" : condition_b ? "bar" : "baz";

リファレンス:https://manual.gamemaker.io/beta/en/GameMaker_Language/GML_Overview/Expressions_And_Operators.htm

制御フロー
// If statement
if (condition) {
    // code
} else if (other_condition) {
    // code
} else {
    // code
}

// Switch statement
switch (value) {
    case 1:
        // code
        break;
    case 2:
    case 3:
        // code for 2 or 3
        break;
    default:
        // code
        break;
}

// For loop
for (var _i = 0; _i < 10; _i++) {
    show_debug_message(_i);
}

// While loop
while (condition) {
    // code
}

// Repeat loop
repeat (10) {
    // code
}

// With loop (iterate instances)
with (objEnemy) {
    health -= 10;
}
データ構造とメモリ管理
Struct(軽量 - 推奨)
// Create struct (no manual cleanup needed!)
var _player = {
    name: "Hero",
    health: 100,
    max_health: 100,
    level: 1
};

// Access properties
show_debug_message(_player.name); // "Hero"
_player.health -= 10;

// Check if property exists
if (variable_struct_exists(_player, "mana")) {
    // property exists
}

// Dynamic property access
var _prop_name = "health";
var _value = _player[$ _prop_name]; // Same as _player.health

用途:軽量なデータコンテナー、設定データ、シンプルなキーと値のペア。 利点:手動でのクリーンアップは不要で、自動的にガベージコレクションされます。

ds_list(動的配列)
// Create
var _list = ds_list_create();

// Add items
ds_list_add(_list, "apple", "banana", "cherry");
ds_list_insert(_list, 1, "orange"); // Insert at index

// Access
var _item = _list[| 0]; // "apple"
var _size = ds_list_size(_list);

// Iterate
for (var _i = 0; _i < ds_list_size(_list); _i++) {
    show_debug_message(_list[| _i]);
}

// CRITICAL: Always destroy when done!
ds_list_destroy(_list);

用途:大きなコレクション、特定のリスト操作が必要な場合、パフォーマンスが重要なコード。 重要:メモリーリークを防ぐため、ds_list_destroy() で手動で破棄する必要があります。

ds_map(キーと値のペア)
// Create
var _map = ds_map_create();

// Add items
_map[? "name"] = "Player";
_map[? "health"] = 100;

// Access
var _hp = _map[? "health"]; // 100

// Check if key exists
if (ds_map_exists(_map, "mana")) {
    // key exists
}

// Iterate
var _key = ds_map_find_first(_map);
while (!is_undefined(_key)) {
    show_debug_message(_key + ": " + string(_map[? _key]));
    _key = ds_map_find_next(_map, _key);
}

// CRITICAL: Always destroy when done!
ds_map_destroy(_map);

使用する場面:レガシーコード、特定のマップ操作が必要な場合、既存の ds_map コードとの統合。 重要:ds_map_destroy() で手動で破棄する必要があります。破棄しないとメモリーリークが発生します。

推奨:可能であれば ds_map の代わりに構造体を使用してください。よりシンプルで、手動でクリーンアップする必要もありません。

メモリーリークの防止

必ず破棄する必要があるデータ構造:

  • ds_list_destroy(_list)
  • ds_map_destroy(_map)
  • ds_grid_destroy(_grid)
  • ds_priority_destroy(_priority)
  • ds_queue_destroy(_queue)
  • ds_stack_destroy(_stack)
  • surface_free(_surface)
  • buffer_delete(_buffer)

Destroy イベントでクリーンアップするパターン:

/// objPlayer Destroy Event
// Clean up data structures

if (ds_exists(inventory_list, ds_type_list)) {
    ds_list_destroy(inventory_list);
}

if (surface_exists(shadow_surface)) {
    surface_free(shadow_surface);
}
ファイルシステムと永続化
datafiles/ フォルダー(同梱ファイル)

重大な制限:一部の GameMaker バージョンでは、datafiles/ 内のルート階層にあるファイルのみサポートされ、サブディレクトリは使用できません。

✅ CORRECT:
datafiles/config.json
datafiles/items.json
datafiles/level_data.json

❌ WRONG (may not work in all versions):
datafiles/configs/game_config.json
datafiles/data/items/weapons.json

登録が必要です:datafiles/ 内のすべてのファイルを .yyp プロジェクトファイルに登録する必要があります。

{"$GMIncludedFile":"","%Name":"config.json","CopyToMask":-1,"filePath":"datafiles","name":"config.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",},
JSON ファイル
// Load JSON from datafiles/
function load_json_file(_filename) {
    if (!file_exists(_filename)) {
        show_debug_message("ERROR: File not found: " + _filename);
        return noone;
    }

    var _file = file_text_open_read(_filename);
    var _json_string = "";
    while (!file_text_eof(_file)) {
        _json_string += file_text_read_string(_file);
        file_text_readln(_file);
    }
    file_text_close(_file);

    return json_parse(_json_string);
}

// Save JSON to working directory
function save_json_file(_filename, _data) {
    var _json_string = json_stringify(_data);
    var _file = file_text_open_write(_filename);
    file_text_write_string(_file, _json_string);
    file_text_close(_file);
}
セーブファイルの保存場所
// Working directory (platform-dependent save location)
var _save_path = working_directory + "savegame.json";

// Game save ID (unique folder for your game)
// On Windows: %LOCALAPPDATA%/[game_save_id]/
var _save_id = game_save_id;
イベントシステムと実行順序
イベントの実行順序(フレームごと)
  1. Begin Step - メインロジックの前
  2. Alarm Events - カウントダウンタイマー
  3. Keyboard/Mouse Events - 入力の検出
  4. Step - メインの更新ロジック
  5. Collision Events - 移動後
  6. End Step - すべてのロジックの実行後
  7. Draw - ゲーム内グラフィックスの描画
  8. Draw GUI - UI オーバーレイの描画
  9. Draw End - 後処理
永続オブジェクト

ルーム遷移後も存続させるには、.yy ファイルで persistent: true を設定します。

重要:イベントハンドラーを持つ永続オブジェクトを使用する場合は、ルームに再入室するときにハンドラーを解除し、登録の重複を防いでください。

// rmGameplay Room Creation Code
// Clear handlers to prevent duplicates
global.input_controller.clear_all_handlers();

// Register handlers fresh
global.input_controller.register_handler("ACTION", function(_cmd) {
    // handle action
});
描画とグラフィックス
基本的な描画
// Draw sprite
draw_sprite(spr_player, image_index, x, y);
draw_sprite_ext(spr_player, image_index, x, y, scale_x, scale_y, rotation, color, alpha);

// Draw text
draw_text(x, y, "Hello World");
draw_set_font(fnt_arial);
draw_set_color(c_white);
draw_set_halign(fa_center);
draw_set_valign(fa_middle);

// Draw shapes
draw_rectangle(x1, y1, x2, y2, outline);
draw_circle(x, y, radius, outline);
draw_line(x1, y1, x2, y2);
サーフェス(レンダーターゲット)
// Create surface
if (!surface_exists(shadow_surface)) {
    shadow_surface = surface_create(room_width, room_height);
}

// Draw to surface
surface_set_target(shadow_surface);
draw_clear_alpha(c_black, 0);
// ... draw operations ...
surface_reset_target();

// Draw surface to screen
draw_surface(shadow_surface, 0, 0);

// CRITICAL: Free surface when done
if (surface_exists(shadow_surface)) {
    surface_free(shadow_surface);
}
パフォーマンスの最適化
ドローコールの最適化
  • スプライトをテクスチャページにまとめ、ドローコールを最小限に抑えます
  • 静的コンテンツ(背景、タイル)にはレイヤーを使用します
  • コストの高い計算はキャッシュします(Draw イベント内で再計算しないでください)
  • Draw イベント内でインスタンスを作成または破棄しないでください
コリジョンの最適化
  • 正確なコリジョン判定の前に、広域フェーズの距離チェックを行います
  • 適切なコリジョンマスク(正確なマスクとバウンディングボックス)を設定します
  • コリジョンレイヤーとグループを使用します
  • インスタンスが必要な場合は、place_meeting() の代わりに instance_position() の使用を検討します
メモリー管理
  • データ構造は使用後に必ず破棄します
  • 不要になったサーフェスは解放します
  • バッファーは使用後に削除します
  • Destroy イベントでクリーンアップします

よくある落とし穴と解決策

包括的なトラブルシューティングガイドについては、COMMON_PITFALLS.md を参照してください。

クイックリファレンス

オブジェクトの作成に関する問題:

  • .yy ファイルがない → オブジェクトが IDE に表示されない → 上記のテンプレートを使って .yy ファイルを作成します
  • .yyp への登録がない → コンパイルエラー「object not found」 → .yyp のリソース配列にエントリーを追加します
  • イベント名が間違っている → イベントが実行されない → 正確な名前を使用します(Draw_64.gml。Draw_GUI_0.gml ではありません)

メモリーに関する問題:

  • データ構造のリーク → メモリー使用量が増加する → ds_destroy 関数を必ず呼び出します
  • サーフェスのリーク → メモリー使用量が増加する → surface_free() を必ず呼び出します
  • Destroy イベントがない → リソースがクリーンアップされない → クリーンアップコードを含む Destroy イベントを追加します

ファイルシステムに関する問題:

  • datafiles/ のサブディレクトリ → ファイルが見つからないエラー → ファイルを datafiles/ のルート階層に移動します
  • .yyp への登録がない → 同梱ファイルが見つからない → ファイルを .yyp に登録します

GML の構文に関する問題:

  • 三項演算子の連鎖 → コンパイルエラー → ネストされた条件を二重の括弧で囲みます
  • 変数のスコープ → 未定義の変数 → ローカル、インスタンス、グローバルの各スコープを確認します
  • 配列の境界 → インデックスが範囲外 → アクセスする前に配列のサイズを確認します

高度なトピック

高度な機能について詳しくは、以下をご覧ください。

  • GML_REFERENCE.md - カテゴリ別にまとめたGML関数の完全なリファレンス
  • QUICK_REFERENCE.md - テーブル、定数、クイックリファレンス
  • ADVANCED_TOPICS.md - シェーダー、ネットワーク、プラットフォーム固有の開発
シェーダープログラミング(GLSL ES)

シェーダーを使用する場面:

  • 高度な視覚効果(ライティング、ぼかし、輪郭線、カラーグレーディング)
  • ピクセル単位の処理(カスタムレンダリング効果)
  • パフォーマンスの最適化(GPUベースの計算)

基本的なシェーダーのワークフロー:

  1. IDE でシェーダーアセットを作成します
  2. 頂点シェーダー(.vsh)とフラグメントシェーダー(.fsh)を記述します
  3. シェーダーを設定します:shader_set(shd_outline);
  4. ユニフォームを渡します:shader_set_uniform_f(u_time, current_time);
  5. スプライト/サーフェスを描画します
  6. シェーダーをリセットします:shader_reset();

GLSL ES の構文、例、一般的なシェーダーパターンについては、ADVANCED_TOPICS.md をご覧ください。

ネットワークとマルチプレイヤー

ネットワークを使用する場面:

  • マルチプレイヤーゲーム(クライアント/サーバー、ピアツーピア)
  • オンラインランキング
  • HTTP API の統合
  • クラウドセーブシステム

非同期 HTTP の例:

// Send GET request
var _request_id = http_get("https://api.example.com/data");

// In Async HTTP event
var _id = async_load[? "id"];
if (_id == _request_id) {
    var _status = async_load[? "status"];
    if (_status == 0) {
        var _result = async_load[? "result"];
        var _data = json_parse(_result);
        // Process data
    }
}

ネットワークソケット、バッファー、マルチプレイヤーのアーキテクチャ、同期パターンについては、ADVANCED_TOPICS.md をご覧ください。

プラットフォーム固有の開発

モバイル(iOS/Android):

  • タッチ入力:device_mouse_x_to_gui()、device_mouse_y_to_gui()
  • 仮想ボタン:virtual_key_add()
  • センサー:device_get_tilt_x()、device_get_tilt_y()

コンソール(PlayStation、Xbox、Nintendo Switch):

  • ゲームパッドのサポート:gamepad_button_check()、gamepad_axis_value()
  • プラットフォームの検出:os_type、os_get_config()

HTML5:

  • ブラウザーとの連携:clickable_add()、clickable_set_style()
  • JavaScript の実行:js_runner_eval()

デスクトップ(Windows、macOS、Linux):

  • ファイルダイアログ:get_open_filename()、get_save_filename()
  • ウィンドウの制御:window_set_fullscreen()、window_set_size()

プラットフォーム固有の開発ガイドについて詳しくは、ADVANCED_TOPICS.md をご覧ください。

リソース

このスキルには、包括的なリファレンスドキュメントが含まれています。

references/

GML_REFERENCE.md(約1500行)

  • カテゴリ別に整理されたGML関数の完全なリファレンス
  • 描画、数学、文字列、インスタンス、ルーム、データ構造、ファイル、ネットワーク、シェーダー、サーフェス、パーティクル、オーディオ
  • よくあるタスク(インベントリ、ステートマシン、会話、セーブ/ロード、カメラシステム)向けのコードパターン
  • StructとObjectの使い分けに関する指針
  • コンストラクターパターンとメソッド変数

ARCHITECTURE_PATTERNS.md(約500行)

  • GameMaker固有のアーキテクチャパターン(サービスロケーター、コマンドパターン、イベント駆動フロー、手続き型ロジック、データ駆動設計)
  • ゲームエンジンでMVC/MVPを使わない理由(イベント駆動型とリクエスト/レスポンス型のアーキテクチャ)
  • GMLのコンテキストにおけるSOLID原則(SRP、OCP、LSP、ISP、DIPをコード例とともに解説)
  • 設計原則(DRY、KISS、YAGNI)
  • パフォーマンスパターン(ホットパスの最適化、structとds_mapの使い分け、ルックアップマップ)
  • 避けるべきアンチパターン(globalの乱用、深い階層、関数の再定義)

COMMON_PITFALLS.md(約800行)

  • オブジェクト作成時の問題(.yyの不足、.yypへの登録漏れ、イベント名の誤り)
  • ファイルシステムの問題(datafiles/のサブディレクトリ、.yypへの登録漏れ、パス)
  • GML構文の落とし穴(三項演算子、変数のスコープ、配列の境界、未定義値へのアクセス)
  • メモリ管理(ds_*のリーク、サーフェスのリーク、バッファーのリーク、クリーンアップパターン)
  • パフォーマンスの問題(描画の最適化、衝突判定の最適化、インスタンス管理)
  • ネットワークの問題(非同期イベント、バッファーの型、タイムアウト、プラットフォームの違い)
  • シェーダーの問題(GLSL ESとの互換性、uniformの命名、テクスチャサンプリング)

QUICK_REFERENCE.md(約600行)

  • 実行順序を含む、イベントの種類/番号の完全な一覧表
  • キーボード定数(vk_*定数、ord()の使用方法、キー押下とキー状態の確認)
  • マウス定数(mb_*定数、マウスイベントの種類、device_mouse_*関数)
  • よく使うGMLパターン(距離の確認、方向の計算、衝突判定、乱数範囲)
  • 色関数(定数、make_color_、color_get_、merge_color)
  • IDEバージョンのリファレンス(一般的なバージョン、機能、互換性に関する注意事項)

ADVANCED_TOPICS.md(約1000行)

  • シェーダープログラミング(GLSL ES構文、頂点/フラグメントシェーダーの例、uniform、多段パス技法、デバッグ)
  • ネットワークパターン(クライアント/サーバーアーキテクチャ、ロビーシステム、パケット構造、レイテンシ補正、バッファー)
  • プラットフォーム固有の開発(モバイルのタッチ/センサー、コンソールのゲームパッド/実績、HTML5のブラウザーAPI、デスクトップOSとの連携)
  • 高度なグラフィックス(サーフェス、ライティングシステム、法線マップ、パーティクル、タイルマップ、カメラ)
  • パフォーマンスのプロファイリング(デバッグオーバーレイ、ボトルネックの特定、メモリのプロファイリング、描画コールの削減、コードのプロファイリング)

注意:このスキルはガイダンスとリファレンスを提供します。最新かつ包括的なドキュメントについては、必ずGameMaker公式マニュアルを参照してください!

コメント