关于回调的一些思考

本文探讨了作者在不使用UI框架时,如何处理UI间的交互,包括Open/Close方法的设计、回调函数与订阅者模式的运用,以及接口在代码中的角色。作者对于何时直接写代码与提供回调接口的抉择产生了疑问,并揭示了两者在不同场景下的适用性。
摘要由CSDN通过智能技术生成

UI问题
  • 最近几个月也做了有几款小游戏,有了一些问题。
  • 我一开始没有搞什么UI框架,可是各个UI界面之间需要打开,比如开始界面开始按钮点击之后打开选择关卡界面。
  • 选择界面的关卡按钮点击之后需要打开游戏界面。
  • 在我没有写框架的情况下,每个UI界面内部都需要有一个Open()Close方法,而且为了调用这些方法,我需要他们之间相互引用,即
  • StartPanel保存了SelectPanel的引用,SelectPanel保存了GamePanel的界面【我没有设置一个UICenter的总控制类】
  • 而且每个UI本身都需要一个初始化的过程,Init(),UI界面需要在这个初始化里面进行按钮绑定的功能,通常来说按钮绑定只需要一次
  • 还有,UI界面的
回调
  • 回调有三种形式,
  • 将回调函数以参数的形式放置进去,
void DoSomeThing(int param, Action callback)
{
	
	callback.Invoke();
}
  • 订阅者模式
public Event OnValueChanged;

publiv void ChangeGravity(int val){

	OnValueChanged.Invoke(val)
}
  • 上面这两种的区别在于,订阅者模式是面向更多的人的,而回调那种形式只面对一个,

  • 我也产生了这么一个困惑。

//我在写代码的时候已经知道这个函数执行完要打开游戏界面
//所以我有下面两种应对方式 
void DoSomething(){
	...
	UICenter.Inst.OpenGamePanel();
}

Action callback = ()=>{
	UICenter.Inst.OpenGamePanel();
}
void DoSomething(callback){
	...
	callback.Invoke();
}
  • 传递函数那种形式更多是用在一个封装性完好的类里面,给别人使用的时候暴露出来的接口。也就是说你不知道别人要干嘛,但是留着这么一个接口给别人使用。
  • 如果自己写代码,知道下一步要干嘛,直接写在函数里面就是了。这样还可以避免GC
接口方面的困惑
  • 接口本身是一个给别人的约定,是给别人来使用的。
  • 他和虚函数重写是同样的作用

interface IPoolContext
{
	void OnSpawn();
	void OnCreate();
}
abstract class Pool{
	
	virtual OnSpawn(){ }
	
	void Spawn(IPoolContext context)
	{
		OnSpawn();
		context.OnSpawn();
	}
}
  • 可以在上面看到,OnSpawn函数本身一个是用在Pool自身的,即他生成对象的时刻,一个是用在生成对象的被生成的时刻,这是两个事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值