
游戏客户端
文章平均质量分 68
langresser
这个作者很懒,什么都没留下…
展开
-
发布测试版本,通过网页在线安装ipa和apk
很多时候我们需要发布一个测试版本,如果发布为安装包,让测试人员自己安装的话,很多时候是非常困难麻烦的,尤其是iOS版本,多数人并不知道除AppStore之外的安装方式。 通过网页在线安装可以达成自动化部署,终端测试用户只需要通过页面下载安装即可。也可以免去发包给发行商的步骤,分享一个链接地址,他们点击链接即可完成安装。 Android版本很好处理,只需要部署好一原创 2016-05-09 11:44:37 · 20313 阅读 · 3 评论 -
程序员的瑞士军刀----Python
这篇文章比较难以成型。大概想表达的意思是,程序员应该通过脚本语言来完成原创 2014-11-07 14:03:11 · 3061 阅读 · 1 评论 -
手游客户端框架的思考
新的公司新项目的手游客户端框架我并不是十分赞同,虽然最终我妥协了,并且为自己竟然做出质疑上司这样的幼稚行为而后悔。但是就最近写的一些代码来看,我更加坚定我自己的思路和想法。当然我的习惯和思路不一定适合其他人,所以我并不会说其他人的思路或者习惯不对或者不好,只要能用清晰的思路写出清晰的代码就好了。一、3D、Unity意味着更长的项目周期? 很多人都会有这样的看法,因原创 2014-10-23 23:41:52 · 5298 阅读 · 3 评论 -
基于ibcurl的跨平台多线程断点续传下载库
之前写过一个多线程断点续传的下载库,不过那个是基于一个linux的下载程序。windows下运行还好,android下就各种问题,调试起来还麻烦。后面开发游戏的时候,一方面对下载要求不高,另一方面也精力有限,所以就没有继续研究。 趁现在有时间,我希望实现一个自己满意的下载库,满足以下需求: 1、多线程下载,根据文件大小和下载的文件数目进行调度。一般情况下是一个文原创 2014-09-21 01:00:30 · 2924 阅读 · 0 评论 -
cocos2d-x进化为2.5D的一些想法
首先我得说Unity3D已经做的很好了,搞这些东西意义真心不大。具体Unity3D有什么优势我之前也写过两篇文章来阐述自己的想法。 如果我的下一份工作是U3D的话,估计我就不会有这些想法或者研究了。不过谁让我又重新转回cocos2d了呢。我的新的工作大概就是写一个cocos2d-x的2.5D游戏。如果按照我自己的想法,那肯定是U3D来做,不过我在技术上从来原创 2014-09-18 05:09:27 · 5552 阅读 · 4 评论 -
安卓下cocos2dx实现cpp部分在线更新
之前没有考虑过这方面的目前cocos2dx + lua的方式可以动态更新所有的脚本文件,但是却无法动态更新cpp部分的代码(这部分东西一般我们称之为底包),事实上采用同样的方案在android下也是可以实现动态更新的,只需要将java代码里加载libgame.so的代码稍微做些修改即可 static { System.loadLibrary("g转载 2014-05-06 14:46:59 · 1690 阅读 · 0 评论 -
Unity动态字体文字破碎的解决方法(Dynamic Font Broken)
使用Unity的动态字体绘制文字的时候,打开两个ui界面的时候,后面的文字会显示破碎(完全乱掉)。我使用的ui插件是Daikon Forge,由于其label的更新机制问题,最终表现的结果可能比一个文本显示破碎更加糟糕。很可能文本控件会不停的刷新,要打开的新界面也显示不出来。 这个从根本上说,是由于Unity的Dynamic Font实现的不够智能。理论上NGUI也会有这样的问原创 2014-03-25 21:11:47 · 17089 阅读 · 2 评论 -
通过卡通渲染描边shader来学习Unity的Shader写法
Unity自带了很多shader,其中就包含卡通渲染和描边的shader。但是我在实际开发游戏的过程中还是遇到了这些shader无法解决的问题。 于是,我们需要理解如何写Unity的shader,并且按照我们自己的需求编写一个新的shader。 大多数情况下,我们遇到的实际问题要比一个酷炫的demo复杂和恶心。就像Daikon Forge GUI插件非常完善的A原创 2014-03-31 23:10:01 · 7773 阅读 · 1 评论 -
使用cocos2d-x + ffmpeg播放视频
1、未完成,待补充,完善后会上传完整代码(包含ffmpeg).目标平台暂定ios,完善后会完美跨平台。2、实用价值跟遇到的困难不成正比,研究价值更大。3、我们需要一个通用的,可嵌入到游戏内部的视频播放控件。 现有的解决方案都是android和iOS各自实用系统控件进行封装。好处是实现简单,一般情况下稳定,并且解码效率高。 缺点是无法与游戏真正契合在一起,毕竟是作为只能悬浮在游戏之上,并且i原创 2013-11-08 09:30:52 · 11531 阅读 · 9 评论 -
值得期待的cocos2d-x 3.0
之前写过几篇文章评论(或者说吐槽)过cocos2d-x,甚至还曾经想自己写一个游戏引擎。不过,经过半年的发展cocos2d-x已经有了长足的进步,完全打消了我自己重头造轮子的想法。 值得欣慰的是,我半年前的想法并不会显得很幼稚,因为其中大部分都在cocos2d-x中得到实现(虽然是由国外的大牛开发的,不过也可以说句英雄所见略同了)。 cocos2d-x是一个神奇的原创 2013-10-17 01:05:06 · 2860 阅读 · 3 评论 -
网页游戏打击感实施要点
攻击者和目标击中和击空一般只有当游戏中构成了打与被打的关系,才能构成我们所说的打击感。没有了打击的对象,想象我们在对空气划拳划脚,而无声无息——如果带来很强风声,其实我们可以说击打对象是空气,那还能带来些许的打击感——那样实际上我们会觉得很无奈和烦恼,那丝毫不能带给我们一点打击的感觉——因此对于带有动作性的游戏,“击空”往往是我们所不想体会到的游戏体验,为了这个体验我们往往都会对着对象穷追转载 2013-10-15 13:51:00 · 2878 阅读 · 0 评论 -
动作游戏设计三部曲 之一 交互至上
写在一切之前的话: DNF火了,自称100W在线。然而并不是说明随便做一款横版动作游戏也能火。《QQ三国》也是横版游戏,其用户组成与DNF不同,它是以轻度玩家为主,设计源自于《冒险岛》一派。《QQ三国》和《冒险岛》,也都火了。 我姑且把《冒险岛》一派的设计成为横版过关。DNF我将其称为横版动作过关。 二者相差“动作”二字。区别在于:《冒险岛》一派可以看做一个横转载 2013-10-15 11:04:19 · 4647 阅读 · 0 评论 -
cocos2d-x+lua代码热加载(Hot Swap)的研究
代码热加载跟自动更新无关,主要目的是在程序运行的时候动态的替换代码,从而实现不重启程序而更新代码的目的。最理想的情况当然是我修改完代码并保存,然后就可以直接在游戏中看到修改后的效果,这个在实际开发过程中会大大提高效率。 即便达不到理想情况,我们也希望可以实现部分热加载,从而简化操作。例如我们可以仅仅对配置文件、消息文件、界面文件实现热加载,这样策划更新数据后可以直接在游戏中看结果,而不需要重新打开原创 2014-11-12 15:28:21 · 4758 阅读 · 2 评论 -
持续集成环境Jenkins的搭建和使用
这几天试着搭了个持续集成环境,我使用的是Jenkins,它的前身是Hadson,因为被Oracle收购了,所以换个名字继续开源,这个有点像MySQL。 持续集成总是跟敏捷开发什么的搞在一起,显得很高大上,其实它就是一个后台服务+web管理配置页面,它可以自动化(定时或事件触发)地执行某项任务,比如编译程序、打包程序、自动发布等等。这个在web开发或者大项目的多人合作上面很有帮助。原创 2014-11-11 13:05:34 · 7865 阅读 · 1 评论 -
实时pvp(皇室战争)网络同步研究
皇室战争实时pvp网络同步原创 2016-05-06 13:13:25 · 16437 阅读 · 12 评论 -
在Unity中使用uGUI绘制自定义图形(饼状图 雷达图)
饼状图或者是雷达图是根据属性自动生成的自定义图形。这里展示了如何使用uGUI完成这一功能。 先附上我制作雷达图的控件的代码 UIPropWidget.csusing UnityEngine;using System.Collections.Generic;using UnityEngine.UI;/* * * 2 6 * *原创 2015-07-17 15:53:46 · 19390 阅读 · 5 评论 -
Dota2技能系统设计分析
前两周写完了新游戏的技能系统。虽然也算灵活,但是跟Dota2的技能系统设计比起来,就差了很多。无论从灵活性还是功能实现上,其技能系统设计的都相当漂亮。如果早一些分析它的技能系统的话,我想我可以实现的更快更好。 与之类比还有一些游戏,其技能系统设计的也很漂亮,比如魔兽争霸3 火炬之光2 星际争霸2,它们都很灵活,从其众多的MOD就可以看出来,甚至MOD的作者可以做出游戏开发者原创 2015-07-06 17:35:01 · 9972 阅读 · 0 评论 -
手游帧同步的研究
网络游戏的同步可以做的很简单,也可以做的很复杂。简单来说就是通过Http或者Socket来跟服务器同步数据。而如果往复杂了说,可以有p2p、帧同步、航位预测等等高级课题可以研究。 因为我们的项目需求----几百个独立单位的实时同步(带pvp的rts),所以研究了下帧同步。不过后来发现它其实有很多问题,所以具体如何还要看其他同事的研究成果。以我个人来说,修改游戏方案反而是最合理的解原创 2015-07-04 17:18:26 · 16053 阅读 · 7 评论 -
游戏开发经验分享:我所理解的打击感
http://www.gameres.com/384281.html大家都知道一个格斗游戏的灵魂就是打击感,对于打击感,相信每个人都有自己的理解,下面就来说说我对打击感的理解吧,虽然年纪小了点,不过为了一窥打击感的奥秘,光被我逐帧分析的游戏就有几十个……积累数年,这可是我的葵花宝典,嘻嘻,下面就跟大家去分享一下我的一些拙见。 首先我们先来看手机这个平台,我这里转载 2015-06-03 09:48:08 · 3017 阅读 · 0 评论 -
Unity客户端框架笔记二(组件实体开发模式的思考)
Unity的Entity-Component-System实现的非常漂亮,非常灵活。很多文章也对这种组件实体的开发模式倍加推崇。因为它契合这么一条规则:优先使用组合而不是继承。 但是实际开发过程中,限制于我的个人能力,想实现一个同样漂亮的基于组件的MMO框架是非常困难的一件事情。 这篇文章是个人开发过程中的一些思考,实际上,所谓漂亮的框架是因人而异的,并且不一定原创 2015-06-02 11:40:13 · 5395 阅读 · 1 评论 -
在Jenkins的Python脚本中模拟用户输入
这个需求很少见,但是好不容易试验成功了,所以要记录下来备忘。 我们使用Jenkins+TexturePacker进行资源的自动打包和转换。 TexturePacker首次运行需要在命令行中输入agree进行版权声明的用户确认。而Jenkins的系统环境是独立于桌面系统的,所以在Jenkins里面要再一次输入agree。于是就有了一个非常恶心的情况,Jenkins原创 2015-03-09 19:45:02 · 3648 阅读 · 0 评论 -
一个Excel转换为Json格式的Python脚本
项目路径:https://code.youkuaiyun.com/langresser/excel2json一个Python脚本,自动转换Excel里面的配置到Json格式。1、这个是为Unity准备的,不过稍作修改可运行于任何环境2、Excel内容要求为键值对的形式,具体可以参考脚本内的说明。 3、读取代码里面限制了读取配置的路径为Resources/config,即所有的配置都要放原创 2015-01-23 09:42:21 · 4526 阅读 · 2 评论 -
cocos2dx的3D粒子特效编辑器(Particle Universe With Torchlight)
地址:https://code.youkuaiyun.com/langresser/particleuniversefortorchlight 在Bin文件夹有编译好的版本,装个vc2013的运行时库就可以直接运行了。 因为cocos2d-x没有3D粒子特效,所以主程就把OGRE和ParticleUniverse给加到项目中。我第一眼看的时候以为很牛,但是现在回过头原创 2015-01-16 11:54:12 · 11611 阅读 · 8 评论 -
在vs2013中使用正则表达式查找和替换文本内容
我们有的时候需要替换代码中的某些内容,因为替换的内容“不一致”,所以不能简单的使用一个replace搞定。这里有几个解决方法,核心思想是一致的,程序员不要做体力活,能交给程序或脚本的就交给程序或脚本来完成。 我先提一个替换的需求,这个在实际工作中是很常见的。比如 把所有的toke[TOKEN_ENUM_ATTACK], token[TOKEN_ENUM_MAGI原创 2014-12-23 17:52:48 · 9274 阅读 · 1 评论 -
手机网游实时同步方案
原始地址:http://www.cnblogs.com/ybgame/p/4165435.html网络延迟是所有实时同步的游戏都会遇到的问题,下面是关于实时同步问题的一些思考和处理方法。具体的解决方法可能比较特殊,首先这里的服务器并不跑定时器(除了一个游戏结束倒计时的定时器),由前端驱动,延迟的情况下主要是由前端来预测或纠正,服务器辅助,处理和转发,据我的了解好像没什么人这样子转载 2014-12-16 09:26:56 · 2045 阅读 · 0 评论 -
关于WinRT中c++和c#相互调用的问题
先说结论(不见得是最终正确的结论,不过google了一晚上也没有查出个所以然来,即便有解决方法我也认为是微软傻x): 首先c#和c++理所应当的不应该在同一个工程中,而只能是同一个工程的两个项目。只能是c++调用c#,而c#不能调用c++。(细节后面再说)。也就是说,唯一的交互途径就是创建一个基于c#的应用程序,然后再创建一个c++的动态库,让c#调用c++的代码。原创 2013-10-13 01:47:25 · 3191 阅读 · 2 评论 -
小议Paintown代码
因为想写一个动作游戏,所以参考了下Paintown的代码。虽然不是一无所获,但是收获甚少浪费了很多时间。 虽然作为仅有的实现了Mugen格斗引擎的开源游戏,并且作为还算不错的2d动作游戏框架,有一定的完整性和参考价值。但是缺点很多导致了它并没有成为一个很火的成功项目。优点暂且不论,这里讨论下缺点以吸取经验教训。 1、太想高大全,什么都想支持,但是什么都支持的不够好原创 2013-10-07 13:53:35 · 2609 阅读 · 0 评论 -
cocos2d-x中luajit的使用
新版本的cocos2d-x使用了luajit来替代原始的lua,好处一是可以极大的提高运行速度(android下可以开jit,运行速度提高10~60倍,ios下不可以开jit,运行速度也可以提高2~3倍)。 二是luajit编译的字节码现阶段来说无法反编译,也就是说无法破解。 这里对luajit进行详细的说明。 1、基本使用。这个很简单,不用修改任何代码,与lua5.1完全兼容。原创 2013-07-19 16:38:42 · 13081 阅读 · 9 评论 -
cocos2d-x android平台切入后台纹理失效的解决方法
android系统下,切入后台,则纹理全部失效,从后台切到前台,cocos2d-x会重新加载纹理。这样有两个问题:1、如果纹理较多的话,加载纹理会卡很长时间,就像死机一样。 变通解决方法是修改引擎代码,增加一个进度条提示。2、文字描边等用到RenderTexture的地方会出现异常纹理,文字会花掉。 暂时不知道原因,无解。这里提供一个解决方案,解决掉纹理失效的问题,初步测试原创 2013-03-11 15:42:04 · 12404 阅读 · 4 评论 -
windows下使用minidump获取和调试崩溃信息
非常简单和实用的功能,先上代码1、使用minidump获取和打印崩溃信息#include #include #pragma comment(lib, "DbgHelp.lib")void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException) { // 创建Dump文件原创 2013-02-27 21:14:07 · 5921 阅读 · 1 评论 -
cocos2d-x添加纹理自动回收机制
1、不是一个完整的模块,所以不提供完整代码,只提供思路和核心代码。 思路很简单,给每个纹理维护一个生命周期和上次渲染时间,每次渲染的时候更新这个渲染时间,CCTextureCache中每隔一定时间(15秒)遍历一下当前纹理集合,如果发现有纹理超过生命周期指定时间没有渲染,则释放此纹理。 CCTexture2D中的getName函数就是很好的更新渲染时间以及释放纹理重新加载的入口。 因为CCT原创 2013-03-11 13:11:32 · 5130 阅读 · 0 评论 -
CCNode扩展,适应MMO的复杂UI逻辑
1、现有的cocos2d-x的ui和点击事件分派机制是无法适应mmo的ui逻辑的。 mmo的ui元素很多,一两百个界面是很正常的。 规则既单一又复杂,这些界面肯定是由简单的对话框组成的,不会有什么amazing的东西,但是这些对话框之间的遮挡、层级关系又是复杂的。如果把这些东西丢给写ui或者写逻辑的程序员去操心,那就等着无穷无尽的bug吧。而且即便维护好现有的代码,这些代码结构也是脆弱的,每添加一原创 2013-03-11 14:40:44 · 4131 阅读 · 1 评论 -
windows下如何检测文件名大小写不匹配
iOS和android(还有linux)都是文件名大小写敏感的,windows是大小写不敏感的。 这样游戏开发的时候就会出现这样的问题,windows下测试正常的游戏(包括mac下的iOS模拟器运行正常的游戏,因为Mac系统也是文件名大小写不敏感的),放到实际设备上运行可能各种崩溃。其中十有八九是配置文件名和实际文件名不匹配造成的。 解决方法有:原创 2013-03-07 14:15:10 · 5566 阅读 · 2 评论 -
跨平台的游戏客户端Socket封装
依照惯例,先上代码:#pragma once#ifdef WIN32#include #include #else#include #include #include #include #include #define SOCKET int#define SOCKET_ERROR -1#define INVALID_SOCKET -1#endif#ifnde原创 2013-03-07 13:37:31 · 18474 阅读 · 32 评论 -
基于id的游戏客户端事件分发(消息队列)
主要目的是完成游戏客户端内的事件处理。这里要明确几件事情:1、同样一个方案在小项目中可能是漂亮的解决方案,但是在大项目中就是很不灵活的处理方法。游戏客户端无论如何都是小项目,不会像windows一样几千位工程师负责上千个dll,一起开发一个操作系统。所以,对我的需求而言,把模块分的很细,很独立意义不是很大,点到即止。2、这样一个事件分发机制主要是处理业务逻辑对gui的控制,或者是不同的界面原创 2013-02-14 00:49:16 · 10031 阅读 · 11 评论 -
打算开始写一个2.5D游戏引擎
1、为什么有那么多游戏引擎还要自己写一个游戏引擎? 我本身并不是学图形学的,只是一个有三年游戏开发经验的客户端程序员。我的工作经历告诉我,如果不自己写一个游戏引擎(即便最终不能有实际应用)那么就不会真正使用一个游戏引擎。在处理普通逻辑的时候还没有关系,但是碰到需要对性能进行优化,或者要实现特殊效果的时候就无从下手了。对于底层知识的了解可以在方向上起指导作用。 并且,虽然原创 2013-01-01 00:40:06 · 6436 阅读 · 3 评论 -
基于cocos2d-x的游戏客户端优化
(未完成) cocos2d-x并不是一个适合网游客户端(mmo)的游戏引擎,越是大型游戏,这个小引擎就越无法驾驭(虽然它非常受欢迎)。 之前我在原来的公司使用的是自主研发的C3引擎,已经对外开放(尚未开源),后面如果我有提到c3引擎,那么指的就是这个2.5d游戏引擎。 我想起我上个月刚离职的时候,c3的首席研究员(应该也是引擎圈内的一个大牛)对我说cocos2原创 2013-01-12 21:24:43 · 14861 阅读 · 21 评论 -
动态加载资源
如今很多游戏engine宣称自己支持动态加载地图,也就是说可以作到跨地图时的零读取时间。听起来很高深的技术,实际不难实现,当然我们在大话西游和梦幻西游中早已经实现了。最近我正在考虑更加通用的解决方案。先说说基本的思路。也就是我们需要把地图数据切割成小块,让每一块的数据读取解析量并不太大。然后,就可以根据玩家所在坐标读取最小数据量的数据。当玩家移动的时候,利用一些机器闲置时间去读周围的场景,或者转载 2013-01-12 19:30:31 · 1480 阅读 · 0 评论 -
资源内存管理
网络游戏的 client 开发中,很重要的一块就是资源管理。游戏引擎的好坏在此高下立现。这方面我做过许多研究和一些尝试。近年写的 blog 中,已有两篇关于这个话题的:基于垃圾回收的资源管理、动态加载资源 。最近在重构引擎,再次考虑这一个模块的设计时,又有了一些不算新的想法。今天写了一天程序,一半时间在考虑接口的设计,头文件改了又改。最终决定把想到的东西在这里写出来,算是对自己思考过程的一个梳转载 2013-01-12 19:28:41 · 1841 阅读 · 0 评论 -
c++写的通用计时器工具
先上代码,本身没有任何高科技的东西,不过很好用和方便。#pragma once#include "CommandQueue.h"#include "GlobalFunction.h"//// 计时器回调函数.//typedef function TimerCallback;class Timer{public: Timer(int timerId, int ms, b原创 2013-03-03 23:38:58 · 2616 阅读 · 0 评论