前回までの状況はこちら。
最新ソースはこちら。
https://github.com/takishita2nd/Picross
ダイアログ処理を大幅に修正しました。
具体的には、ボタン押下処理をラムダ式で与える、という形にしました。
class Button : ObjectBase
{
private Action _action = null;
public void SetAction(Action action)
{
_action = action;
}
public virtual void OnClick()
{
if(_action != null)
{
_action.Invoke();
}
}
sizeButton.SetAction(() => {
dialog.Show();
});
ダイアログも同じように、
class Dialog
{
private Action _action = null;
public Dialog()
{
_isShow = false;
_button = new Button(436, 450, "確定");
_button.SetFontOffset(46, 4);
_button.SetAction(() =>
{
if(_action != null)
{
_action.Invoke();
}
});
_texture = new asd.TextureObject2D();
_texture.Position = new asd.Vector2DF(_x, _y);
}
public void SetAction(Action action)
{
_action = action;
}
public void OnClick(asd.Vector2DF pos)
{
if (_button.isClick(pos))
{
_button.OnClick();
}
}
Dialog dialog = new Dialog();
dialog.SetEngine();
dialog.SetAction(() =>
{
dialog.Hide();
});
特にUI周りは、オブジェクトが持つデータの引き渡しをどうするか、で頭を悩ませてしまいます。
こういうときは、慣れないと見た目複雑に見えてしまいますが、慣れればラムダ式にしてしまった方が、返ってコードがスッキリするんです。
実際、こうすることで、クラスの数を削減できました。
ボタン押下時の処理もラムダ式にすることで、実際の処理は作成元で定義すれば良いので、Buttonクラス一個で済んでしまいます。
UI周り自作するって予想以上に難しいね。
この調子でどんどん作ってきましょう。