• 二维游戏开发的点滴


     

    现在写这些文字,是担心过几天就忘了,写不出来了。这一年来记性极差,一件事情一转头就忘了。可能是因为老了。

    上次的那个游戏已经过去一段时间了,很久不碰了。有一些经验,还是值得记下来给大家看看。有人说开发一个游戏很难,有人说很简单。实际上从一无所有开始开发起来,确实很难。几十年前,卡马克说子弹退壳这个效果都想了很久,现在所有的资料都可以从网络查到。现在和以前的一大进步就是有了网络,想要的东西都可以查的到。除了特别曲高和寡核心的东西。我开发的这个游戏上实际上是一个RPG游戏,这种游戏源代码遍地都是,所做的只是改编一下就是,实际上没有什么技术含量。过程中利用了HotEditMotionWelder两个工具,抛开这两个工具所自带的代码,自己独立写的代码其实不过30%40%。这两个工具使用的是java,所以更大的工作量在于javac的移植上。真正麻烦的部分是仿真实现java的基本类上。人家的代码都是千锤百炼过,我自己写的代码则不知道什么时候出现错误。这个游戏开发的一个收获一是对自己有了信心。有些事情想起来是挺难,比如从02年我一直想开发的一个游戏一直到现在都没开发出来,主要是真的没动手去做。任何事情其实都不难。只是时间上的长短。二是建立了一堆底层java的模拟库,关键是测试过了。以后再移植的时候就简单了。

    二维游戏开发其实不难,三维才有点难度。实际上开发的人多了也不难,君不见那些出书的人两星期就可以写一个5关的程序。读完Directx RPG游戏开发,基本上对这个过程有了了解。开发一个世界级游戏,精致画面,足够智能。这才是一个有竞争力的游戏。那游戏开发难在什么地方,难在它足够复杂。以前我就体会到,普通试题和竞赛题有什么区别,区别在于普通题目问题到结果之间是直线或近似直线,而竞赛题是曲线而至是环线。到达目标需要绕半天,大部分人包括我没有足够的耐心绕下去,半路就颓然而废。同样游戏的复杂性在于规模大而散,事物之间联系过于紧密。Maybe有人觉得开发网站相对较简单,简单在于其页面对网站功能做了恰当的划分。当一个东西的规模足够小的时候,任何人都能做好它。我不喜欢山寨机的界面开发,原因在于,改动一个地方,其他的许多地方都要改。就像我写的程序一样。大部分历史的进步就是为了偷懒。规模还不大的时候,非结构化程序设计,中等规模的时候,结构化程序设计,大规模的时候面向对象,就是为了分离。如今细节多了,开始面向方面的程序设计。那我们看一看游戏中需要什么?

    试想这样一个游戏场景。我点开一个游戏,游戏先出现公司标志,然后进入主菜单,我点开始游戏,进入游戏画面。在游戏画面中点ESC键,出现游戏中菜单。游戏中有蓝蓝的天,白白的云,炎炎的阳光,绿绿的草,青青的水,高高的建筑,还有漂亮的女人和萎缩的主人公。主人公找到一个女人开始搭讪,“Hello”,“Yes Sir”。美女说,我的发卡掉了,你帮我去找。于是主人公去找。主人公还可以跑到人家里翻箱倒柜。还可以打怪练级。怪物还能掉下好东西。捡到一个绣花针,二话不说插进耳朵里。主人公吹着口哨走在乡间的小路上,前面一块突兀的石头挡住了去路。旁边一块路牌写着请走这里,主人公走过去,掉进了一堆大便里。满屏花花绿绿,游戏提示,生死何足道,待从头,收拾旧山河。

    从中可以统计一下游戏中的必要因素。游戏状态管理。LOGOGAMINGMENULOADINGMENUINGAME。这可以用一个变量来存储。如果更复杂,需要建立一个状态机。地图管理。地图分层。天空、云朵、草地、动态水。建筑。角色,美女、人偶。对话框。任务。道具管理。装备。冤死的敌人。障碍物。陷阱。底层还有图像处理、声音、网络等等等等。有了这一些是不是就感觉到事情简单了很多。那个写TCP/IP协议的人说,这个东西很简单么,照着协议说明写就可以了。不涉及一些很技术的东西的话,游戏也很简单照着剧本写就是。游戏中还有一个重要的东西就是脚本。实际上不是为了适应变化的话这东西是不需要的,金点时空实现的第一版游戏就没有脚本罢。或者单独的任务放在一个dll里面,CS就是这样做的吧。这样的坏处就是让程序员难受了点。

    困了,下次再写。

  • 相关阅读:
    架构基础-CAP原理
    Nginx基础
    Nginx基础
    Nginx基础
    Nginx基础
    Nginx基础
    Nginx基础
    Nginx基础
    CentOS 7 架设LNMP动态网站
    Linux下文件描述符
  • 原文地址:https://www.cnblogs.com/j2eedesigner/p/2091371.html
Copyright © 2020-2023  润新知