射击游戏项目开发笔记 (五)
字符屏蔽似乎是在我朝才有的东西.这屏蔽那屏蔽的,干脆彻底把Internet变成Local Area Network得了(虽然现在对大部分人来说已经是Local Area Network了).如果说我有什么职业梦想的话,The Great Wall崩塌估计是我唯一的梦想了.
在目前国内游戏的字符屏蔽中,主要是分为:聊天屏蔽(过滤词语) 和 命名屏蔽(过滤词语+过滤特殊标点符号)
过滤词语
首先看以下趣图:
光荣在于平淡,艰巨在于漫长
射击游戏项目开发笔记 (五)
字符屏蔽似乎是在我朝才有的东西.这屏蔽那屏蔽的,干脆彻底把Internet变成Local Area Network得了(虽然现在对大部分人来说已经是Local Area Network了).如果说我有什么职业梦想的话,The Great Wall崩塌估计是我唯一的梦想了.
在目前国内游戏的字符屏蔽中,主要是分为:聊天屏蔽(过滤词语) 和 命名屏蔽(过滤词语+过滤特殊标点符号)
过滤词语
首先看以下趣图:
射击游戏项目开发笔记 (四)
项目可用目录说明:(android为例)
一般的android程序可读的目录有
资源加载规则
0.从包内文件中加载
1.资源加载模块直接提供从包内文件和从用户目录(或者SD卡某目录)两种加载路径
2.游戏第一次启动时,将包内文件全部copy到用户目录,或者SD卡目录,下载文件也下载到这个目录,然后统一在这个目录加载(这是我之前的项目的方式,现在看来是有问题的)
射击游戏项目开发笔记 (三)
定时器是游戏中必备的支持之一,而且也属于代码运行频率比较高的部分.所以一个设计精良的定时器绝对是地基里的一块好砖头.
在Unity中有很多种方式可以使用定时器.
Update中计算时间
最简单的可能就是在Update中获取deltaTime
,然后累计时间触发了,如果要隔一秒调用某个函数,使用Update代码类似如下
private float m_fTimeTotal = 0.0f; void Update () { m_fTimeTotal += Time.deltaTime; if (m_fTimeTotal > 1000f) { m_fTimeTotal = 0.0f; // do something } }
射击游戏项目开发笔记 (二)
由于很多的因素,项目改用U3D开发,而项目组目前为止没资深的Unity开发程序员,只能摸着石头过河了.我们网络通信数据使用protobuf的格式,(关于这protobuf的格式分析在上一篇笔记中已经分析得很详细了).简单说明一下目前项目的开发环境与插件的使用情况:
开发脚本: C# (.Net 2.0) 由于我与另一位同事均无C#功底,所以业余时间学习C#必不可少,本人而言已经有了基本的计划.(为什么不是JS 或者BOO,详细翻了一下Assets Unity 基本上大多插件都是用C#写的,Boo更加是第一次听)
开发工具:抛弃官方的Mono 使用VS2012,主要使用了UnityVS插件,注意这个插件现在已经免费了.传送门
GUI:有UGUI与NGUI和GUI三个选择,目前选的是NGUI,主要原因是NGUI的教材网上一抓一大把,由于换引擎的突发性,已经没太多时间给我去看那个比较好用了.(很多事情总是充满无奈)
网络模块:Unity5 提供了一套Net组件,在我花了两天时间去看了它的几个组件之后,发现根本不足以满足我们项目的要求.所以决定使用.Net自带的Socket自己实现.(约莫花了三天的时间)
昭和零食店的故事
偶然中发现这个偏养成类的游戏,虽然画风古老但是给了我眼前一亮的感觉.今天把这个游戏通关了,心里忽然有种暖暖的感觉.
这个游戏的主要玩法是通过进货,升级零食,玩具,打扫来进行养成收集,收集的道具有玩具,零食,顾客,还有最主要的信件.其中我觉得最有趣的是顾客与信件.
顾客
总共有12个顾客,每个顾客分别是不同的角色,有各种小孩,年轻人,老头,还有最特殊的妖怪打扮的小孩,每个顾客都需要在你升级到一定水平才会出现.然后每个顾客都被设定了一定的购买力.在玩游戏过程中 我莫名的对每个顾客的出现产生期待感.
射击游戏项目开发笔记 (一)
目前我使用的引擎对代码的编码方式有了非常严格的控制,一般的C++写法已经无法在引擎中运行了,由于目前项目准备使用protobuf来作为通讯数据,所以我必须实现一个动态解析protobuf的库,考虑到已经有人做了一个事情,而且做得很好(https://github.com/cloudwu/pbc),所以我就把云风大侠的c版本移植到目前使用的引擎上来.这篇文章主要记录的是一些修改事项和protobuf的一些基本内容,并非使用教程.
protocol buffers是google提供的一种将结构化数据进行序列化和反序列化的方法,其优点是语言中立,平台中立,可扩展性好,目前在google内部大量用于数据存储,通讯协议等方面。PB在功能上类似XML,但是序列化后的数据更小,解析更快,使用上更简单。用户只要按照proto语法在.proto文件中定义好数据的结构,就可以使用PB提供的工具(protoc)自动生成处理数据的代码,使用这些代码就能在程序中方便的通过各种数据流读写数据。PB目前支持Java, C++和Python3种语言。另外,PB还提供了很好的向后兼容,即旧版本的程序可以正常处理新版本的数据,新版本的程序也能正常处理旧版本的数据。
ProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。
在Win下通过代码调用CMD执行批处理不是什么新技术了,主要是有一下三种方式,这里粗略提下.我实现过C版 C++版,汇编版,AS版的调用执行批处理命令.下面是C++版本的做法:
直接调用函数system
最简单的方式可如下调用system函数执行命令
system("echo Hello CMD");
缺点:会显示CMG控制台窗口,无回显数据,优点:简单直接
使用ShellExecuteEx
其次简单的方式是使用ShellExecuteEx函数
SHELLEXECUTEINFO sei; memset(&sei, 0, sizeof(SHELLEXECUTEINFO)); sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.fMask = SEE_MASK_NOCLOSEPROCESS; sei.lpVerb = _T("open"); sei.lpFile = _T(strToolName); sei.lpParameters = "echo Hello CMD"; // SW_HIDE SW_SHOWNORMAL 参数决定是否显示控制台 sei.nShow = SW_HIDE;//; SW_SHOWNORMAL ShellExecuteEx(&sei); // 等待进程结束再往下执行 WaitForSingleObject(sei.hProcess, INFINITE); CloseHandle(sei.hProcess);
缺点:无回显数据,优点:可隐藏控制台
概念篇
DirectX 9.0,C++
作为3D编程菜菜,经同事指点若须打好基础,应从DirectX3D开始,因为D3DX对于3D编程的封装没那么高级.同样一个功能 D3DX往往需要几个函数,而OpenGL等则一个函数搞定,太高级的封装反而隐藏了原理.(大家都会用cocos2d-x,而且用得很溜,试问又有几个能拍胸脯说真正理解其内部原理呢.)下面记录一些常用概念,主要方便自己查询.
什么是引擎
引擎是什么?大家在游戏开发中肯定会遇到的,在日常同行交流中 首先问的估计也是:你们项目用的是什么引擎啊?用cocos2d-x?用U3D?用虚幻4?用CryEngine?用godot?那为什么要把他们叫做引擎呢?说到引擎一般有三种东西:
汽车的引擎也叫发动机,因为那是整个汽车的动力源泉.
搜索引擎指自动从因特网搜集信息,经过一定整理以后,提供给用户进行查询的系统。
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些互交式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程序而不用由零开始。大部分都支持多种操作系统平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。
我们关注的显然是游戏引擎,一句话概括:游戏引擎就是一整高级编程组件.
工作变动
在3月02日从中手游离职出来已经一个月了,不知不觉在这个公司呆了快三年时间,而我刚毕业对自己的计划跳槽时间点也刚好是三年.这个时间离开也不算违背了当初自己的计划,离职的原因真的很难说清楚.委屈了?还是钱少了?其实都有,只是委屈的成分现在感觉更足一点(未来我可能会转而认为还是钱的问题,毕竟委屈这个东西是会因为时间而冲淡的,就像某些感情一样).明明我们都那么爱游戏.现在能回忆起来最清晰的还是那一场又一场和不同的人吃的不同的散伙饭.我们究竟要散伙多少次才能找到 真^伙伴 呢.
离职的当天就是我到现在的公司入职的时间.在现在的公司我适应度快得出于意料,刚毕业那时候在意的很多东西 主观的客观的,现在反而能淡然处之.而那个时候口头最在意其实心里最无视的东西-个人成长,现在反而真正重视起来.希望在现在这个创业公司能创造一些美好的东西.
近期忙碌
在过去一个月里,我主要是负责把现在公司之前封装的一套cocos2d-x代码 兼容到android平台,编写部分文档和新增引擎测试案例.由于在上周已经决定转向3D,所以目前这套我认为已经达到70%(有很多还可以细化的地方并没有处理.)的封装库也等于没太大作用了.同事做得比我更干脆,他直接分享了,传送门. 需要的可以去下载玩玩,某些功能相当不错,对骨骼动画性能的优化,对图片资源大小的压缩更是超出目前普遍的处理方式几条街,但是BUG也不少.谁能真正阻止BUG的产生呢?呵呵
author: Rect 2015/03/10 cocos2d-x version: - 2.2.5 ndk version: r9 jdk version: 1.8
鉴于每次配置各种环境都要找各种教程,实在神烦,所以不如自己整理出来.
setp 1.安装或解压如下全部工具到一个文件夹,例如我的 E:\tool\android
工具 | 文件名 | 安装或者解压后路径 |
---|---|---|
NDK 编译C++需要使用的框架 | android-ndk-r9-windows-x86_64.exe | E:\tool\android\android-ndk-r9 |
SDK 安卓SDK | android-sdk_r23.0.2-windows.zip | E:\tool\android\android-sdk-windows |
JDK java虚拟环境 | jdk-8u40-windows-x64.exe | E:\tool\android\Java |
ADT eclipse+adt集成环境 | adt-bundle-windows.zip | E:\tool\android\adt-bundle-windows |
Cygwin调试编译C++用的工具 | setup-x86_64.exe | 安装选项请看图,路径随意,但不可有空格 |