游戏开发与面向过程(POP)

可能大多数人学习编程都是从C语言开始的。然后在学C++的时候听过这样一句话:C语言是面向过程的、C++是面向对象的。

这让很多人潜意识里觉得, “面向对象 比 面向过程 更高级”!

其实并不是这样,它俩的地位应该是平等的、缺一不可的。

---------------------------------------NRatel割---------------------------------------

“过程”在程序中无处不在。不管你写的是同步逻辑还是异步逻辑,都是一个个“过程”。

而 “面向过程” 就是以“过程”为中心的编程思想。

如果将面向过程当作核心思想,

那么:面向过程就是在告诉你怎么做这件事,而面向对象则将做事过程中涉及到到的数据和行为进行了合并整理,形成了一个个对象。

-------------------------------------------------------------

面向过程的精髓在于 自顶向下地分解问题!!!。

有两个痛点,

1、面对一个复杂问题要如何分析?

2、异步逻辑,回调飞来飞去,绕得人头大,要怎么理顺?

先整体,再向下细分,可以得到完整答案(就像一个分层状态机)。

需要注意的是:你应该知道当前处于什么状态,应该怎样回到主流程上去。

-----------------------------------------------------------------

在游戏开发中,最典型的就是 游戏启动流程

游戏在启动时,有一大堆事情要做。这里给出一个过程分析。

原图在我的 processon上 :游戏启动流程 | ProcessOn免费在线作图,在线流程图,在线思维导图 |

不同的项目可能需要调整顺序 或 干掉其中某些部分。

如:单机游戏可以不更新;通服游戏可以略过服务器选择的过程;单一角色的游戏可以略过角色选择的过程。

---------------------------------------NRatel割---------------------------------------

另外,游戏开发中,还有回合式战斗、游戏结算 等等很多情形都有一大堆异步过程在里面。

用好过程分析,然后将各个子模块也要尽量设计得 “高内聚” 一些(不该本模块负责的事情不管)。

一切将变得井井有条。

简例说明(lua):很明显,func1容易飞来飞去找不见(尤其是各过程方法分散在不同文件中时),func2的方式则简明清晰。

local x = {};

----------------互相耦合的方式----------------
function x:aaa(onFinish)
    self:bbb(onFinish)
end

function x:bbb(onFinish)
    self:ccc(onFinish)
end

function x:ccc(onFinish)
    onFinish();
end

function x:func1(onFinish)
    self:aaa(onFinish)
end

----------------自顶向下的方式----------------
function x:aaa(onFinish)
    onFinish()
end

function x:bbb(onFinish)
    onFinish()
end

function x:ccc(onFinish)
    onFinish()
end

function x:func2(onFinish)
    self:aaa(function()
        self:bbb(function()
            self:ccc(function()
                onFinish();
            end)
        end)
    end)
end
--------------------------------
function x:main()
    self:func1(function() print("结束") end)
    self:func2(function() print("结束") end)
end
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NRatel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值