谈一谈个人在接下来几年的游戏技术方向

我对目前火爆的手游和之前火爆的端游、页游通通不感兴趣。除非项目非常nice,或者团队的人非常有趣,否则我不太会积极地回到游戏行业中。理想的状态是,我是一群酷爱游戏且专业的人的之一,做着一款看着就好玩的电视、电脑游戏。虽然Xbox ONE已经来中国了,PS4也要上市了,但是中国电视游戏的春天恐怕还要等上几年。所以,我考虑在这几年积攒一下技术。

所谓的积攒技术,就是做一个2D引擎,其实也就是造轮子。如果是即刻投身商业开发,那么造轮子,一定是件可耻的事情。Unity或者cocos2d-x已经足够好了。而这对于我来说,只是个人私事。理由不具体直接解释了,反正我就是爱折腾。

我个人很喜欢Unity的快捷和强大,但也感到如果Unity和cocos2d-x一样开源,很多事会好办很多。而对于后者,我不太喜欢它的设计。cocos2d吸收了很多Cocoa的特点,但对于一个游戏引擎来说,有些地方还是简洁点好。

对于一个2D引擎来说,图形底层并不复杂,只要把Sprite做出来,这个引擎就能用来做游戏了。一个成熟的2D引擎,必不可少要有一套动画系统。以前的2D游戏多采用序列帧,现在基本上是实时演算的关键帧插值动画。动画编辑器的开发量是不小的,我考虑使用Flash作为动画编辑器,用JSFL做数据导出。Flash可做的事情非常多,比如还可以作为UI布局器使用,甚至粒子特效编辑器也省了。使用通用编辑器来取代内部编辑器,是节省成本的一个好方法 …

Continue reading »

关于有理数、无理数中的“理”字

我们知道有理数就是可以用整数比值表示的数字。但对于无理数,我们就不好下定义,只好说不能用整数比值表示的数字就是无理数。

对于有理数、无理数中间这个“理”字,我们也不太容易理解,数字不具备位格,怎么还能讲道理。其实这两个名词,来自日文。我们知道,很多汉语里采用的日式外来词,和汉语字词意思多少有些出入,理解起来就会有点“无厘头”。

我在网上随便搜索了一下,据说这个日式外来词,在翻译时也受到了徐光启和利玛窦翻译的《几何原本》的影响。根据网上的说法,在徐、利版本的《几何原本》中,将比值作为“理”字翻译出来。但是我不太确信这样的解释,我不清楚文言文中的“理”字可作比值的意思。

我所知道的,这个“理”字,在最早希腊文中,是用logos表示。logos大概就是事物本质规律的意思,也有话语、可被语言表达的事物的意思。圣经里,面向希腊语地区读者的《约翰福音》,用logos来关联上帝的话语,中文版本圣经里翻作“道 …

Continue reading »

关于std::list的排序

std::list和std::vector不同,无法使用STL算法库里的sort(),因为std::list不支持随机访问(random access)。

// std::list排序示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <list>

// 它是个仿函数
struct mycmp {
    bool operator()(int* a, int* b) {
        return *a < *b;
    }
}; 

int main() {
    std::list il;
    int ia[10];

    time_t t;
    time(&t);
    srand((unsigned int)t);

    printf …

Continue reading »

一个Win32控制台类

对于编写Win32程序,尤其是游戏这种实时性高的程序来说,断点调试未必是最合适的调试方法。很多时候,我们更渴望看到实时打印的调试信息。

一种方法是使用VC的调试函数OutputDebugString(),将信息输出给VC调试控制台。还有一种方法是在Win32控制台工程的基础上创建窗口程序(入口为main而非WinMain)。可以用宏来控制编译,使Debug版本时有控制台,Release版本没有控制台,像这样:

// 一个简单的方法
#ifndef _DEBUG
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
#else
    int main(int argc, char** argv) {
#endif//_DEBUG

但这种方法并不灵活,这里介绍一个直接用Win32 API获得控制台的方法。一切皆在代码中:

// DbgCon.h

#ifndef DBGCON_H
#define DBGCON_H

#include <windows.h>;
#include …

Continue reading »

C语言对数据的隐藏封装

在C++中,如果我们想把数据结构隐藏起来,只为用户提供接口,可以通过实现继承接口类的方式到达目的。那C中,可以采用什么方式呢。下面有一例:

// demo.h

#ifndef DEMO_H
#define DEMO_H

typedef struct Demo* Demo;

extern Demo DemoCreate(int num);
extern void DemoDestory(Demo demo);
extern void DemoShow(Demo demo);

#endif//DEMO_H
// demo.c

#include "demo.h"
#include <stdio.h>
#include <stdlib.h>

typedef struct Demo_ {
    int …

Continue reading »

艾未未作品《4851》观后感

艾未未先生的《4851》是我看到的最深刻的艺术作品。

87分钟的片长,可能没几个人会真的花87分钟完整地看完这部片子。

没关系,你的观看方式已经是这部艺术作品的一部分。

这是部完美的艺术作品,像一味催化剂。

只要你对5·12的任何一点有所思考,它都会从理性和感性两方面触发你。

你可以通过YouTube观看:《4851》(中国用户访问YouTube需要跨越GFW)

Continue reading »

动物保护的逻辑──小论《海豚湾》的政治正确性

一、某些动物性情趋向于人,人们能从这些动物身上获得人道情感,保护这些动物是在维护人道主义。之所有争取一些动物不作为牲畜屠宰,争取一些牲口在屠宰时更快死亡以减少受虐程度,是基于这样一个泛功利的动机。

二、野生动物是地球生态的重要组成部分,保护野生动物,是为了地球生态能够正常运行下去。地球生态的正常运作,才能让人们和他们的后台得以更好地生存。这也是一个功利的理由。

所以即使抛弃崇高的理念,以现实利益为名,动物保护主义也是完全站得住脚的。

《海豚湾》作为一部动物保护主义题材的环保纪录片,它的拍摄,是在遵从上面两个重要逻辑的前提下展开的。海豚保护组织最终在国际规则制定会议(法的层面)上,展出血淋淋的证据,给日本滥杀海豚的恶行以有力一击。这种行事方式十分成熟。

Continue reading »