GameMaker 日本語掲示板

【GML】構造体使っていますか?

3 コメント
views
17 フォロー

2.3で追加された構造体使っていますか?
GameMaker Studio 2 Manual - Structs

hayate212
作成: 2021/05/02 (日) 00:54:17
通報 ...
1
hayate212 2021/05/02 (日) 04:30:17

自分はこんな感じで使っています

InstanceBase

function InstanceBase(_hp, _speed, _assets) constructor{
  // 変数
  hp = _hp;
  speed = _speed;
  assets = _assets;
  
  // 一時変数
  mpX = undefined;
  mpY = undefined;
  
  // 状態変数
  isMoving = false;
  
  // 移動開始
  static move = function (_x, _y){
    mpX = _x;
    mpY = _y;
  }

  // インスタンス共通処理
  static step = function (){
    if(mpX != undefined && mpY != undefined){
      with(other){
        if(point_distance(x, y, other.mpX, other.mpY) > other.speed){
          other.isMoving = true;
          if(x < other.mpX){
            image_xscale = 1;
          }else{
            image_xscale = -1;
          }
          if(y < other.mpY){
            sprite_index = other.assets.front;
          }else{
            sprite_index = other.assets.back;
          }
          move_towards_point(other.mpX, other.mpY, other.speed);
        }else{
          other.isMoving = false;
          other.mpX = undefined;
          other.mpY = undefined;
          speed = 0;
        }
      }
    }
  }
}

player

// create
player = new InstanceBase(10, 0.5, {front: player_front, back: player_back});

// step
if(mouse_check_button(mb_left)){
  player.move(mouse_x, mouse_y);
}

player.step();

画像

2
生高橋 2021/05/02 (日) 14:51:17

クラスみたいな感じですね。
自分は変数系をただ単にまとめるだけとか、関数の戻り値を二つほしいときなんかに使ってます。

3
hayate212 2021/05/02 (日) 15:13:10 >> 2

親オブジェクトを作って子オブジェクトに継承する実装パターンでも同じことが出来てましたが、如何せん可読性に欠けるのがGMSの課題点だったなと。Structが使えるようになってよりスムーズな開発が出来るようになったのが個人的には一番嬉しいです。