タスクシステムの勉強

作ったはいいけど使った経験がないのでこれでうまく行くか分かってないので、簡単なゲームのプロトタイプでもこさえて色々試してみることに。

class MyShip {
  public float x;
  public float y;
  public float width;
  public float height;
  public float speed;
  public int shotwait;
  
  public MyShip() {}

  public void Init(TCB cb, object info) {
    DeviceInfo di = info as DeviceInfo;

    width = 32;
    height = 32;

    x = (di.screen.getWidth() + width) / 2.0f;
    y = (di.screen.getHeight() + height) / 2.0f;
    speed = 4;
    shotwait = 4;

    // 移動へ
    cb.proc = new TaskProc(Move);
  }

  public void Move(TCB cb, object info) {
    DeviceInfo di = info as DeviceInfo;
    if (di.key.isPress((int)KeyCode.LEFT) ) 
      x -= speed;
    if (di.key.isPress((int)KeyCode.RIGHT) ) 
      x += speed;
    if (di.key.isPress((int)KeyCode.UP) ) 
      y -= speed;
    if (di.key.isPress((int)KeyCode.DOWN) ) 
      y += speed;

    if (x < 0) 
      x = 0;
    if (x > di.screen.getWidth() - width) 
      x = di.screen.getWidth() - width;
    if (y < 0) 
      y = 0;
    if (y > di.screen.getHeight() - height) 
      y = di.screen.getHeight() - height;
  }
}

こんな自機クラスを用意してタスクコントローラに登録。

TaskController tc = new TaskController(new TaskList(256));
tc.add("自機", 1000, new TaskProc(new MyShip().Init));

タスクの切り替えにdelegateが使えるのはすごく楽チン。流石C#。って、delegateならインスタンスも渡せるからTCBにワーク領域はいらなかったですね。失敗。