想写一个二维游戏引擎,不知道应该怎么入手 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
gengyanda
V2EX    程序员

想写一个二维游戏引擎,不知道应该怎么入手

  •  
  •   gengyanda 2015-07-20 22:12:06 +08:00 4783 次点击
    这是一个创建于 3740 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在这个领域基本上没什么经验,也没打算做多复杂的事情。
    就是想用C#设计一个简单的二维rpg引擎,希望能简单跑一些rpg,就跟rpgmaker差不多的性质。

    之前自己有过相关的尝试,用gdi plus画一些窗体,效果还行。有人推荐我用directX,又觉得入手太困难,没必要费那个劲。
    还考虑到游戏有一些动画,再想起以前用timer做一堆控件到处飞的动画效果结果把自己恶心半死的经历,有些没主意。

    现在主要是绘制和动画两方面。
    不知道各位有什么见解。

    第 1 条附言    2015-07-21 22:05:34 +08:00
    很感谢各位的各种见解。

    各位都在向我推荐各类现成的引擎,其实我个人还是希望*写出*一个自己的引擎来……

    目前的问题主要还是该用什么去绘制。各位给出的想法主要还是openGL,刚刚查了一下,在.net上用openGL一个比较流行的方案貌似是用一个叫做tao的框架什么的……

    还有动画的问题。可能也不算问题了吧,网上的帖子蛮多,我也不会再去蠢到用timer这种东西……
    22 条回复    2015-07-22 10:08:35 +08:00
    YuJianrong
        1
    YuJianrong  
       2015-07-20 22:23:20 +08:00
    很好奇为什么阁下没什么经验却要从高难度的引擎入手……
    Mutoo
        2
    Mutoo  
       2015-07-20 22:30:11 +08:00   1
    handmadehero.org
    手把手教你做2d引擎
    gengyanda
        3
    gengyanda  
    OP
       2015-07-20 22:36:08 +08:00
    @YuJianrong 没打算做高难度的引擎…… 而且经验做做不就有了么
    gengyanda
        4
    gengyanda  
    OP
       2015-07-20 22:41:58 +08:00
    @Mutoo 嗯,去看了看。真正意义上手把手,以及15美刀。
    其实感觉没必要一步一步跟着走,因为自己也比较喜欢摸索。大概只是想寻求一些想法,去学习一些路上需要用的技能顺便对可能遇到的问题做个心理准备
    dog047
        5
    dog047  
       2015-07-20 23:23:42 +08:00
    游戏引擎这个概念应该包括了音效库,图形库,物理库等,复杂点的还要处理网络部分 ,反正我是怕了。对我来说写出一些图形API实现自己想要的效果就是引擎了。我是先学OpenGL ES,从看Cocos2D源码入手。http://www.opengl-tutorial.org/zh-hans/
    gengyanda
        6
    gengyanda  
    OP
       2015-07-20 23:41:48 +08:00
    @dog047 openGL确实是一种思路。不过鉴于是.net的环境我还是考虑用ms的一些库。directX太高大上有点瞎眼,最近又有说gdi plus已死的声音,不知道该用什么画图了。
    Kilerd
        7
    Kilerd  
       2015-07-21 00:29:01 +08:00
    @dog047 感觉游戏引擎里面最重要的应该是,图形库和逻辑库(也就是物理库),其他的开一个接口就可以了。
    quadpixels
        8
    quadpixels  
       2015-07-21 00:54:20 +08:00   5
    啊,俺来说点不太成功的粗浅的理解和学习经验…

    曾经照着这本书《游戏物理引擎开发》(英文版 http://www.amazon.com/Game-Physics-Engine-Development-Commercial-Grade/dp/0123819768 中文版 http://product.dangdang.com/23410640.html)想做个3D的碰撞检测与碰撞响应系统。

    但是后面到了碰撞向量检测之后,由于一开始没有明白整个系统是建立在冲量的基础上这一点,而且摩擦也没做不出来,所以后来砍掉重来改做了个2D的碰撞检测系统,把目标改为做出能堆叠的物件。最后的效果在此:
    ?from=y1.7-2

    虽然还是很破,比如堆叠的稳定性很烂,堆叠下方的物件还会漂移,但做出来的一刻还是好有成就感有木有!!而且领略到了「只要正确地模拟了冲量,万里长征就走完了第一步」这样的美妙的感觉。
    俺在弄这个2D版的时候,还参考了一个很简单的2D物理引擎(绝对不是Box2D或Chipmunk那么复杂的,而是从碰撞检测到碰撞分离、从平到到转动一步一步各有一个Visual Studio的工程文件那样的,一共只有千多行程序,可惜俺之前的硬盘挂掉了,所以我得在网上找一找才能给出它的名字。)

    总得来说,啃一遍回以后,无论结果如何只要尽力了就觉得不怕困难和麻烦的东西了 TvT

    俺画图用的是Opengl,同样的源文件可以在Windows下编译,也可以在Linux下编译。

    个人感觉物理部分是以计算机的离散计算来模拟现实生活中的连续现象的过程,它只是2D游戏引擎的一个部分而已,它的职责和一个2D游戏引擎的管理场景树的职责是不一样的。那方面我就不懂了,只是大概知道在Cocos2D里面看得见的东西和看不见的东西都是以一个场景树组织成的。其实在做2D物理的时候,会涉及到从世界坐标系转换到物体的自身坐标系的过程,这其实就是沿着场景树向下走一级时所经历的坐标转换的过程。

    说了这些浅薄的见解,不知有没有用呢 :D
    感谢你看了我这些浅薄的见解,希望有用 XD
    quadpixels
        9
    quadpixels  
       2015-07-21 01:27:12 +08:00
    找到了!!!我说的那个规模较小比较容易研究的带源代码的2D物理引擎是这个: http://elancev.name/oliver/2D%20polygon.htm
    另:上一篇回复有错别字,最后一句话打了两遍,不好意思啊

    s/啃一遍回/啃一遍书/
    s/感谢你看了我这些浅薄.*//
    zapper
        10
    zapper  
       2015-07-21 09:07:54 +08:00
    LZ既然知道RPG MAKER,把它的Sprite,Scene,Window,Character,Battler,EventInterpreter类研究一番,也就差不多了....
    dcoder
        11
    dcoder  
       2015-07-21 09:09:30 +08:00
    @gengyanda 楼上都是些不实用的建议...

    你直接用 Unity 3D 的 2D 功能就是, 非常成熟了, 商业游戏都用.
    http://unity3d.com/cn/pages/2d-power

    还有, 你不是用 C# 吗, 用 Unity 再合适不过了, 现在 personal 版是免费的.
    不要去研究 cocos2D 之类, 那样就把自己带歪了...
    dcoder
        12
    dcoder  
       2015-07-21 09:11:28 +08:00
    发完帖发现我看错了, 你是要 *写* 游戏引擎呀... 上面的帖子当我没说... XD
    unoyx
        13
    unoyx  
       2015-07-21 09:56:19 +08:00
    先写游戏,等做了几个游戏再把公共部分抽出来就是引擎了。
    nozama
        14
    nozama  
       2015-07-21 10:09:20 +08:00
    我`感觉`游戏引擎分两大类: Entity-Component System (ECS) 和 SceneGraph, 大游戏用前者, 小游戏用后者.
    snnn
        15
    snnn  
       2015-07-21 10:21:28 +08:00
    2D游戏确实不一定用dx/opengl。虽然用了效果更好
    你要不先从SDL入手。
    hitmanx
        16
    hitmanx  
       2015-07-21 11:21:14 +08:00
    我接下去几个月由于工作需要会啃两本书,<计算机图形学>以及<opengl编程>(“红宝书”),在这之前还得把线性代数过一遍(忘得差不多了)。业余时间也打算研究一下游戏引擎,然后动手写一个自己的。有兴趣小伙伴可以一起来啊:)
    assassinpig
        17
    assassinpig  
       2015-07-21 11:43:20 +08:00
    说不好这么高难度的东西,但如果lz效果和功能的要求不是很高的话,按某一个现成引擎抄抄应该没啥问题,之后也许lz就开朗了起来
    acros
        18
    acros  
       2015-07-21 11:48:26 +08:00
    不做游戏直接开发引擎的话,会不会绕弯子啊
    chmlai
        19
    chmlai  
       2015-07-21 12:08:13 +08:00
    可以看看云风那个 ejoy2D
    learnshare
        20
    learnshare  
       2015-07-21 12:16:12 +08:00
    先做做简单的游戏,再总结探索一个 Engine
    gengyanda
        21
    gengyanda  
    OP
       2015-07-21 21:41:05 +08:00
    @quadpixels 其实关于物理引擎方面自己以前也想了很多,我也理解运用冲量来模拟碰撞的过程(其实说起来有些像高中的物理)。对于物体自身的运动用动量和角动量来描述,与其他物体的作用用冲量去处理,可能就是这个想法……但是具体绳子这类东西怎么模拟,觉得还是不怎么直观。

    回到正题上,能做出2d物理效果的话,应该也是相当酷的游戏引擎了……不过的话现在还没有想那么多,只是单纯想做个rpg引擎出来,物理引擎可能对我来说是更遥远的事情。
    invite
        22
    invite  
       2015-07-22 10:08:35 +08:00
    搭车 "好奇为什么阁下没什么经验却要从高难度的引擎入手……"
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5038 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:54 PVG 11:54 LAX 20:54 JFK 23:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86