zoukankan      html  css  js  c++  java
  • 游戏编程 && cocos2d 学习

      基本概念:
      场景(CCScence) 层 (CCLayer) 精灵(CCSprite) 导演 (CCDirector) 

      基本动作:基本动作的本质就是改变某个图形对象的属性:位置,角度,大小等;
      动作与CCNode的关联:CCNode有一个方法叫runAction;
      动作分类:瞬时动作、延时动作、动作速度。
      瞬时动作:1.放置 2.隐藏 3.显示 4.可见切换
      延时动作:1.移动到 2.移动 3.跳跃到 4.跳跃 5.贝塞尔 6.放大到 7.放大 8.旋转到 9.旋转 10.闪烁 11.色调变化到 12.色调变换 13.变暗到 14.由无变亮 15.由亮变无 (一直不明白 to和by的区别) 

      事件处理框架
      
    touchesBegan touchesMoved touchesEnded touchesCancelled

      获取所有触摸信息(可接使用touches参数 或 通过event参数获得) 

      游戏地图场景
      
    涉及到的问题 

      1.移动位置控制:主角在地图中移动时必须考虑到地图中物体的障碍,不能越过墙体,必须通过木桥渡过河流。更加真是的模拟会要求主角在不同的地面上有不同的移动速度:土地速度一般,雪地较滑,移动快,停止效果之后等。
      2.地图动态变化:主角在游戏过程中的行为导致地图变化。这里所说的变化是永久的而不是临时的(如敌人实体的腐烂和慢慢消逝,这种效果不涉及到修改地图)。比如摧毁敌方建筑,建立我放建筑,修建道路等。
      游戏中的地图编程最主要的功能是:
      1.如何展示一个较大的地图场景。
      2.如何实现地图对游戏主角和敌人移动的限制:阻止移动、修改运动效果。
      3.如何动态改变局部地图的显示内容。

      游戏的架构 
     
     主角在地图中的游历过程中需要判断:1.是否遇到障碍物 2.是否被敌方炮弹击中。两种判断都涉及到游戏中的一个十分重要的概念:碰撞检测(Collision detection).

      第一步:初始化
      在这一步中,游戏程序执行标准初始化操作,如内存分配、资源采集、从磁盘载入数据等等。
      第二步:进入游戏循环
      在这一步中,代码运行到游戏主循环体内部。此时各种操作开始运行,运行持续到用户退出主循环为止。
      第三步:获得玩家的输入信息
      在这一步里,游戏玩家的输入信息被处理和/或缓存,以备下一步人工智能和游戏逻辑使用。
      第四步:执行人工智能和游戏逻辑
      这一部分,游戏代码主题部分,诸如执行人工智能、物理系统和一般游戏逻辑,其结果用于渲染下一帧图像。
      第五步:渲染下一帧图像
      在这一步中,玩家的输入和第四部中游戏人工智能和游戏逻辑的执行结果,被用来产生游戏的下一帧动画。这个图像通常放在不可见的缓存区(offscreen buffer area)内,因此玩家不会看到它逐渐被渲染的过程。随后该图像被迅速拷贝到显示存储器中并显示出来。
      第六步:同步显示
      通常由于游戏复杂程度的不同,游戏在计算机上运行的速度会时快时慢。比如,如果屏幕上有1000个物体在动作,cpu的负载就比只有10个对象时重得多。从而游戏的画面刷新率(frame rate)也会时高时低,而这是难以接受。因此必须把游戏按照某个最大帧率进行同步,并使用定时功能和/或等待函数来维持同步。一般来讲能达到30帧/妙的帧速率就非常好了。
      第七步:循环
      这一步非常简单,只需要返回到游戏循环的入口并重新执行上述全部步骤。
      第八步:关闭
      这一步是游戏的结束,表示将退出主程序或游戏循环,并回到操作系统。然而,在用户进行结束之前,用户必须释放所有资源并清理系统,这些释放操作对任何其他软件也是同样要做的。
      在大多数情况下,游戏循环是一个含有大量状态的FSM(finite state machine,有限状态自动机)。 

      粒子系统
      
    为什么要使用例子系统:粒子系统让你的游戏更加真是而富有生命感。

      1.包含大量所谓粒子对象;
      2.宏观特性:每个粒子都要遵守主要规律;
      3.微观特性:每个粒子在宏观属性上的随机性、变异特性;
      4.过程动态特性:每个粒子形同模拟的都是一个不断变化的动态效果而不是静态不变的,因此就有一个持续更新状态的要求。

      没接触游戏编程时,看到满屏幕的物体运动,想是不是每个物体就要占一个线程?那么多鸟在飞那得消耗多少资源;上面提到的游戏循环根本不需要多线程,每一帧算一个游戏循环,来执行用户输入的事件每一个物体(鸟)的位置等逻辑,之后draw出来,到了显示这一帧时,把draw的内容显示出来。

      参考:《知易Cocos2d游戏开发教程》 《Cocos2d官网》、《windows游戏编程大师》

    write by fgd

  • 相关阅读:
    表单自动填充autocomplete的兼容性方案
    函数的默认参数值
    利用zookeeper搭建hadoop HA集群
    zookeeper设置开机启动项
    zookeeper集群挂了的恢复流程
    zookeeper集群搭建
    docker 安装ElasticSearch的中文分词器IK
    [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    把mysql服务设置开机启动项
    docker-compose的使用
  • 原文地址:https://www.cnblogs.com/wendao/p/article4_game0.html
Copyright © 2011-2022 走看看