秋之忧郁吧 关注:3,200贴子:189,234
  • 18回复贴,共1

对于游戏开发的建议

只看楼主收藏回复

我这几天用了几个小时分析 羽翼的祈愿 1.05
因为我自己也在做游戏软件,我总结出了一些游戏开发的关键点,有些是羽翼的祈愿里面没有达成的。
这里我发一下对于这个游戏的建议。
首先是画面。
画质是复古像素风,风格很好,气氛也不错。缺点是不能适应高清的显示器。
如下图所示,我按F6把窗口调到最大也没屏幕键盘大。
我的显示器是 2k分辨率的,dpi缩放是200%

还有个问题,是处理设备上下文更新。当系统进入锁屏状态再恢复时,之前的设备句柄可能会无效。这时就需要重新创建。一旦发生句柄或设备上下文无效这种异常就要重新申请。
没有妥善处理的话画面会不再更新或者变成纯黑色无法恢复。
从技术上分析,这款游戏使用gdi32.dll进行绘制,audioses.exe和dsound.exe进行声音播放。
从这里可以看出更新画面时几乎没有让GPU进行任何计算任务,基本上都是CPU在忙。这会在低主频CPU的设备上出现掉帧等不良情况。
多线程方面呢,基本上是三个核心在忙。渲染任务落在了一个核心上,另外的两个核心在忙别的。如果渲染任务均匀分配,性能会有一些提升。
还有个问题是关于输入的。据我所知,RPG Maker是可以做出接受鼠标和触摸屏输入的程序的。
其余方面没什么问题。声音,贴图,文本,逻辑都很好。


IP属地:陕西1楼2016-02-17 19:52回复
    用rmva有些确实能做得出来,但有个关键的问题----这游戏没有程序猿的撒╮(╯▽╰)╭


    IP属地:上海来自Android客户端2楼2016-02-17 20:31
    收起回复
      @秋之忧郁会长 @超级玛丽铁丝


      IP属地:四川来自Android客户端3楼2016-02-18 03:29
      收起回复
        由于采用了光影特效导致不少玩家在某些场景掉帧,前几天刚好在思考怎么改善来着


        IP属地:新疆来自Android客户端5楼2016-02-18 04:17
        回复
          发现打错几个字。audioses.dll,dsound.dll
          ---贴吧极速版 For UWP


          IP属地:陕西来自WindowsPhone客户端6楼2016-02-18 10:53
          收起回复

            光照效果可以考虑用 PointDiffuseEffect取得点光源的照亮效果,用CropEffect将它与墙壁裁剪再使用ArithmeticComposite把它与原图混合。这样即使电脑的性能只有手机上的骁龙810那种程度也不会卡。
            ---贴吧极速版 For UWP


            IP属地:陕西来自WindowsPhone客户端7楼2016-02-18 11:18
            收起回复
              如果追求更好的效果,把PointSpecularEffect与PointDiffuseEffect一起用,使用CompositeEffect混合它们,再与原图用BlendEffect,参数为Add进行混合。
              ---贴吧极速版 For UWP


              IP属地:陕西来自WindowsPhone客户端8楼2016-02-18 11:20
              收起回复
                以上特效在Direct 2D和Win2D可用。
                ---贴吧极速版 For UWP


                IP属地:陕西来自WindowsPhone客户端9楼2016-02-18 11:21
                收起回复

                  做个不是很科学的比较,羽翼的祈愿 1.05 分辨率 640x480,按F6调节 dpi 缩放 125 成为 800x600的窗口。场景里面有2个明显的点光源和一个疑似高斯模糊出来的扇形光源,CPU使用率是 8.1 %左右。

                  我的Demo程序使用了硬件加速,把特效交给显卡计算,分辨率 1366 x 600,dpi 缩放是 96,有一个明显的光源会根据鼠标或触摸点进行移动。CPU使用在 2.8 %左右。


                  IP属地:陕西13楼2016-02-20 17:00
                  收起回复
                    我查了一下,这个游戏引擎属于商业软件,也就是不公开源代码。这种情况下要用DirectX就难了。需要做一个外挂式的拓展程序,否则难以实现嵌入DirectX相关的代码。而且这么做的话游戏性能也是受影响的。大致的思路是先拿到游戏画面所在的窗口句柄,然后远程线程注入,加载额外的运行环境,再用注入的线程把Direct 2D绘图代码调度到STA线程上面运行,并且DrawingSession几乎只能用SourceOver模式。
                    ---贴吧极速版 For UWP


                    IP属地:陕西来自WindowsPhone客户端15楼2016-02-24 21:51
                    回复