您的位置:首页 > 其它

strange IOC框架 塔防游戏实例应用 (四)

2017-03-23 11:02 363 查看
源码在最后放上

应用场景: 进入游戏开始计时



顺序逻辑: 进入场景发出View层事件 -》 View的Mediator接收 -》调用View触发-》发出结束事件

1.进入场景发出View层事件

IEnumerator StartCount()
{
yield return new WaitForSeconds(0f);
dispatcher.Dispatch(ViewEventType.StartCount);
}


2. View的Mediator接收

public class Mediator_CountDown : EventMediator {

[Inject]
public View_CountDown View_CountDown { get; set; }
//监听
public override void OnRegister()
{
View_CountDown.Init();
dispatcher.AddListener(ViewEventType.StartCount, OnStartCount);
}

public void OnDestroy()
{
dispatcher.RemoveListener(ViewEventType.StartCount, OnStartCount);
}
//开始计时
void OnStartCount()
{
StartCoroutine(StartCount());
}

IEnumerator StartCount()
{
int Count = 1;

while(Count < 4)
{
View_CountDown.SetCount(Count-1);
Count++;
yield return new WaitForSeconds(0.1f);
}
//发出结束事件
dispatcher.Dispatch(EventType.StartCountComplete);

UIManager.Instance.CloseUI(UIPanelType.CountDownPanel);
}

}


3.调用View触发

public class View_CountDown : View {

public GameObject Fire;
public Image Count;

public Sprite[] CountSprites;

public void Init()
{
Fire = transform.Find("Fire").gameObject;
Count = transform.Find("Count").GetComponent<Image>();
}
//UI处理
public void SetCount(int i)
{
Count.sprite = CountSprites[i];
}

public void RotateFire(int speed)
{
Fire.transform.localEulerAngles = new Vector3(Fire.transform.localEulerAngles.x, Fire.transform.localEulerAngles.y, Fire.transform.localEulerAngles.z + speed);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: