游戏的流程和循环 (3)游戏中的场景

    游戏里有很多的场景,这些场景都继承自基类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()。

  似乎到这,场景也可以暂时停下来了,我们要讲一件我们的游戏角色了。但不要忘了,游戏的场景有很多的,有的还很复杂,在后面还有很多的工作要做。

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值