资深设计师Tony Ventrice解析手机游戏开发的四个层次

营销人员可能明白强势品牌的重要性,但却对游戏机制一无所知;程序员可能深谙强大游戏机制的意义所在,但对游戏机制的传达方式一窍不通。这样的营销人员和程序员都无法各自打造出成功的游戏。因为一款成功的游戏离不开跨领域的协调性,然而,我们经常见到情况就如上所述,游戏制作团队的成员往往只熟悉游戏设计中面向己方的专业知识,对其他学科的知识所知甚少。

此时游戏设计师的职责显得尤为关键把不同专业的观点融合为全面的设计构想。如果设计师做不到,结果就是,团队里的成员各忙各的,把时间和精力浪费在毫不相干的工作上。

游戏设计包含了几个层次的工作,且各个层次彼此不同,就如游戏的市场营销和用户界面,把这些毫不相干的层次组合起来,这看似一项艰难的任务。完成这项任务需要明白游戏设计交叉性的理论框架、形象化游戏设计方案的下滴(上滴)效应。

手机平台的两个支点

手机游戏带给玩家的融入感可能不如掌机游戏或电脑游戏那么强烈,但如果要深入研究游戏设计结构,简易的手机游戏却是个理想的探索起点。手机游戏开发之所以独特基于两点:能简则简,以量取胜。

能简则简。你可能已经听说过这么句话:一旦所有可删除的对象都被删除了,一个游戏就趋于完美了。手机平台检验了这个论断。即使是在今天这个iPhone的黎明时代,手机游戏开发者仍然不得不应对手机游戏需局限于128K空间的难题,而这128K包括了美工、、游戏数据、声音和其他所有游戏要素。

这种容量限制几乎足以令任何一种游戏设置寸步难行,但游戏还是顽强地活下来了,虽然硕果仅存的是些再简单不过的游戏。这些残存下来的游戏拥有高度精炼和清晰可辩的设计构架。

以量取胜。在时间相对紧凑的开发周期中,手机游戏设计师要同时开工好几个游戏,这几乎囊括所有你能想得到的游戏类型。

同时设计三四款不同的游戏,你有两个选择:要么是通过一个共同的工作期掌握所有游戏的设计进程,要么顶着令人抓狂的压力分别跟进所有游戏设计进度。以下是一些手机游戏设计的经验总结。 (更多…)

标签Tags:, , , , , , , , , , , , , , ,

完美解决“由于这台计算机没有终端服务器客户端访问许可证”

由于windows2003默认仅支持2个终端用户的登陆。当“终端连接超出了最大连接”的情况出现导致不能登录时,可以:

1、在另外一台Windows2003的机器上运行“tsmmc.msc”,打开远程桌面连接,添加一个新的连接,输入远程服务器的IP地址、远程登录帐号和密码,登录到远程服务器桌面。这个方式可以随时登录到远程桌面。

2、在登录出问题的服务器上, 单击“开始”,指向“管理工具”,然后单击“终端服务配置”。

3、 单击“服务器设置”,然后双击“授权模式”。

4、将“授权模式”更改为“每用户”,然后单击“确定”。 以后就不会出现此类问题了。

原因:Window 2003 不管理“用户 CAL”。这就是说,即使许可证服务器数据库中有一个“用户 CAL”,它在被使用时也不会减少。这样就不会为了让每个用户都有一个有效的终端服务器 (TS) CAL 而根据“最终用户许可协议”(EULA) 的要求删除管理员。在没有使用“设备 CAL”的情况下,如果不是每个用户都有一个“用户 CAL”,就会违反 EULA。

标签Tags:, , , , , , , ,

最令PHP初学者头痛的十四个问题

(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

PHP和Socket简介

Sockets在PHP中是没有充分利用的功能。今天你将看到产生一个能使用客户端连接的服务器,并在客户端使用socket进行连接,服务器端将详细的处理信息发送给客户端。

当你看到完整的socket过程,那么你将会在以后的程序开发中使用它。这个服务器是一个能让你连接的HTTP服务器,客户端是一个Web浏览器,这是一个单一的 客户端/服务器 的关系。 (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , ,

深入探讨PHP中的内存管理问题

一、 内存

  在PHP中,填充一个字符串变量相当简单,这只需要一个语句”"即可,并且该字符串能够被自由地修改、拷贝和移动。而在C语言中,尽管你能够编写例如”char *str = “hello world “;”这样的一个简单的静态字符串;但是,却不能修改该字符串,因为它生存于程序空间内。为了创建一个可操纵的字符串,你必须分配一个内存块,并且通过一个函数(例如strdup())来复制其内容。

以下为引用的内容:

  {

  char *str;

  str = strdup(“hello world”);

  if (!str) {

  fprintf(stderr, “Unable to allocate memory!”);

  }

  }

  由于后面我们将分析的各种原因,传统型内存管理函数(例如malloc(),free(),strdup(),realloc(),calloc(),等等)几乎都不能直接为PHP源代码所使用。 (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , ,

ajax的缺点

下面是我对一部分缺陷的看法:

为Ajax而Ajax(Using for the sake of .)

很同意这点,当一个技术本身的生存意义由于它自身的亮点而被抹杀,不知道是这个技术的幸运还是不幸。

干掉了back按钮(Breaking the back button)

back按钮是一个标准的web站点UI的重要功能。然后,后退按钮没法和js很好的合作……
gmail似乎作的很好?不过没去仔细看过gmail如何实现后退和js相容的,被这个mistake一提醒,也许这也是ue的一个切口哦。

点击的时候没有提供一个可视化的提示(Not giving immediate visual cues for clicking widgets)

……也许是我没看懂,觉得写这段的人自相矛盾。。他说没提供可视化提示,不过是拿gmail右上角的红色提示作为例子。 (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , ,

mysql优化及全文搜索

my.cnf文件常见优化模块
[mysqld]
port = 3306
-id = 1
socket = /tmp/mysql.sock

# 避免MySQL的外部锁定,减少出错几率增强稳定性。
skip-locking

# 禁止MySQL对外部连接进行DNS解析
skip-name-resolve

# 指定MySQL可能的连接数量
back_log = 256
(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

《高性能网站建设指南》读书笔记

规则1,减少HTTP请求

这是最重要的原则,如果14条规则里只能选一条,那就是它了。可以通过多种方法减少HTTP请求,例如合并图片,合并JS和CSS等等。这一点薄荷网有很多改进的余地,首先应该把现在的JS合并了。

规则2,使用内容发布网络

内容发布网络就是CDN了,但是CDN似乎挺贵的,目前还不适合薄荷网,不过可以考虑自己弄一个网通的静态资源服务器解决有中国特色的可恶的南北互通问题。

规则3,添加Expires头

这个没什么好说的,是个建网站的人都应该知道。目前薄荷网图片,,,flash过期时间设置了3年,可以说是永久了,:) Expires有个麻烦的地方是内容更新问题,Ruby on Rails这方面处理的非常棒,它是在文件名后面自动带了

资源文件的timestamp,完美解决。 (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , ,

用四叉树管理散布在平面上的对象

周末一直在考虑怎样在游戏服务器中保存和管理那些有平面坐标的对象。希望能方便的查到每个对象附近的东西。以往用过的方法是给(平面)场景打上格子,然后再把每个对象放入相应的格子中。

这次又遇到这个问题,却不想用网格的方法来解决问题了。

原因主要是这么几点:一,用网格对于大场景特别消耗内存,而且不太适合做无限延展的场景。二,查询每个对象周围的东西时,不太方便。格子的粒度越小,速度越慢。

虽然这两个问题,都可以通过改进算法来回避。不过这次,我想尝试一下用四叉树解决这个问题。

用四叉树的话,内存占用量应该 O(n) 。如果定死了四叉树的扩展深度,可以推算出节点的最大可能消耗量。我想,如果只是为了解决 AOI 的计算,5 级深度已经足够。这样,大约预分配出 20 * n 个节点,几乎肯定够用了。

我希望场景是从坐标原点向四周无限延展开,没有什么具体的尺寸限制。所以,这次实现的时候对四叉树做了改造。第一级的划分是一个特例,它将平面分成四块,每一块都可以向某个方向无限延伸。
(更多…)

标签Tags:, , , , , , , , ,

数据服务器的设计

今天开始正式开始做数据服务器。在这点上,我希望一组服务器上所有的逻辑服务遇到的数据存取需求都通过一个单一的数据服务器完成。而且,写入数据是单向通讯的。即,逻辑服务器只提读写盘请求,而无须确认。写数据好说,读数据稍微难处理一点,我现在的方案是,数据服务器加载数据的部分只对位置服务器负责,把数据提交到位置服务器即可。位置服务器可以通过分析数据知道玩家的数据流应该流向哪台逻辑服务器。

以上逻辑是基于每个玩家有独立的数据的,而且一个玩家同时只存在于唯一一个场景。也就是说,当一组数据存活的时候,只唯一属于一台逻辑服务器。这样做的好处是,切换场景非常的简单,只是让玩家从一个场景退出,给数据服务器发出写盘指令,并发送所有数据。数据服务器写盘的同时也 了这些数据,并向位置服务器提交新的位置,并把这些数据转发向位置服务器。位置服务器可以再转交给新的场景。

对于玩家登陆和登出的处理并没有特别之处,我们可以设立两个虚拟场景,一个负责登入,一个负责登出。每个新连接自动导入登入场景,这个场景负责发出加载指令(下面可以看到,甚至无须设置加载数据的协议)。然后再做一个自动的场景切换操作即可。而玩家登出,则是转入登出场景,这是一个黑洞,玩家的连接可以在这里安全的断掉。

当玩家不停的穿梭于各个场景之间时,为了避免频繁的数据转发,我们可以给玩家数据做一个赃标记。如果没有弄赃,实际的数据可以不被转发。这个标记的另一个意义在于,若数据没有弄赃,而数据服务器的 cache 中又没有数据时,就需要从外存加载了。其实这就是一个读请求。 (更多…)

标签Tags:, , , , , , , , , , ,