游戏里有很多的场景,这些场景都继承自基类State。
让我们进入一个比较简单的场景来学习一下,更复杂的场景将放在后面学习。
首先回忆一下怎么进入到场景的:在Game里面,当进行场景切换的时候(调用SwitchState(int stateIndex)),在这里面调用了State.Deactivate()和State.Activate()方法。
这两个方法都是Virtual所修饰的,但Deactivate()方法只是在基类里,在子类里很少再覆盖他,即便有也是很简单的。这个方法主要是起到清空的作用。
Deactivate()---> Clear()-------->1:Children.Clear() 2:ClearSprites()[_sprites.Clear()]
基类里的Activate()方法是一个空方法,什么都没有做,只等着子类来覆盖它。
(1)简单的场景菜单
在这个Activate()里面主要添加了一些EZBtn。
_buttons = new List<EZBtn>();
_buttons.Add(new EZBtn(....));
....
(2)简单的游戏场景--- 只有主角和地图
I:调用基类的InitCamera()方法
II:使用子类的方法CreateBG()方法
III:添加地图和主角(这一部分我们会在其他章节详细讲到)
IV:再次调用InitCamera()方法。
......
每一个场景都是非常的不同的
这里我们有看到了State的一个重要方法InitCamera(Sprite target,int numberOfLayers,Tilemap level)
我理解这是一个近似滚屏的方法。If your state includes sprites moving around on s acrolling background,you can use this function to initialize the automatic camera system.这里面的实际操作是通过一个叫_scrollFactor的Point数组实现的。在这个类里还有一个方法UpdateCamera()方法吧后面的工作做了。而这个方法又是放在循环中的,所以他也是一个循环方法。
好了,我们又到了循环了,到了这里,意味着我们的权力已经越来越小了,很多事情要交给游戏自己去处理了。百花齐放百家争鸣,即便你是上帝也不意味着主宰和摆设一切。
每一个场景的Update()方法都是不同的,但我们这个简单的游戏场景几乎只调用了基类的Update()。而基类也没有做更多的事情,也只是调用了UpdateCamera()。
似乎到这,场景也可以暂时停下来了,我们要讲一件我们的游戏角色了。但不要忘了,游戏的场景有很多的,有的还很复杂,在后面还有很多的工作要做。