GameMaker 日本語掲示板

DestroyイベントとCleanUpイベントの違い

0 コメント
views
17 フォロー

Destroyイベント = instance_destroy()が呼ばれた瞬間に実行!
CleanUpイベント = Destoryイベントの直後、Roomの移動によってオブジェクトが破棄された直後、ゲーム終了によってオブジェクトが破棄された直後に実行!


【注意⓵】
ds系やsurfaceなどメモリを確保した変数をDestroyイベントで解放した際、Roomの移動時には実行されないのでメモリは解放されません!

【注意⓶】
DestroyイベントとCleanUpイベントはinstance_destroy()が呼ばれたと同時にDesotroy→CleanUpの順で実行されるがinstance_destory()が呼び出されたイベントは最後の行まで呼び出されます。

//Destroyイベント or CleanUpイベント
ds_list_destroy(list);

//Stepイベント
if(isDead == true) {
    instance_destroy();//この時点でDestror・CleanUpイベントが呼ばれlistのメモリは解放!
}
ds_list_add(list,"テスト");//listのメモリは解放されてるのでエラー!

なのでreturnかexitを読びStepイベントを即刻終了させる。

if(isDead == true) {
  instance_destroy();
  return;
}

【結論】

  • メモリを解放する処理は基本CleanUpイベントに書く!
  • instance_destroyが呼ばれた後にメモリを解放した変数がないか注意する!
生高橋
作成: 2022/09/23 (金) 11:11:33
通報 ...