关于游戏逻辑模式的观点----谁调用谁

在这里是根据我个人做游戏过程中总结的观点(仍然着重声明,如果有人不同意,可以认为这是我写给自己看的)

在游戏中我们常常会遇到一个主要的问题,谁在修改谁,谁调用谁,当两个物体A和B发生交互从而触发功能function01,那么功能function01应该写在A中还是应该写B中,function01是由A来调用还是B来调用呢。

针对上面的问题,也许哪位大牛看了会马上提出各种设计模式,我也想过这个问题,但是无论看了多少遍设计模式,我还是不会,因为无论这些设计模式如何好,我仍然发现似乎这对于游戏似乎过于复杂了,游戏不像普通的应用程序编程,游戏中过多的继承,模式的约束反倒使得游戏编程变得过于复杂。经过大量的尝试之后我又回到unity引擎(你以为我在说什么,我一直围绕unity引擎讨论的)最初原旨,面向组件编程。什么各种模式都滚蛋吧,我又不是做引擎的,我只是想做游戏。似乎扯远了,上面这些只是我再次提醒自己而已,下面回到正题。

为了简单起见,我们以传送玩家为例:

如果玩家A要在B的位置传送到下一个场景的C点,我们有两种方式。一,玩家A设置触发器triggerA,如果触发在B的位置,并且如果按下I键,那么进行传送;二,B设置触发器,如果玩家A进入触发区域,并且按下I键,那么进行传送。这里使用使用那种方式呢?传送功能写在A中还是B中呢?或者还有更好的办法吗,首先我们讨论两种原则(我自己定的):

一,谁主动谁被动:很明显,玩家是主动,所以玩家应该是进行传送的人,所以传送功能的调用在玩家A身上进行。

二,单一功能原则:在这里我们玩家的主要功能是跑和跳,所以传送功能及相关参数不应该写在玩家身上,我们玩家应该是觉察到自己可以传送,那么调用可以调用的传送功能,B是传送位置信息点,所以应该将传送功能方法及相关参数写在B中,当玩家进入B的区域时,调用B的传送功能进行传送

原文地址:https://www.cnblogs.com/xiaoahui/p/10312455.html

时间: 2024-10-18 08:45:53

关于游戏逻辑模式的观点----谁调用谁的相关文章

Game Programming Patterns(游戏编程模式)-架构,性能与游戏

游戏编程模式- 架构,性能与游戏 本系列博客是:Game Programming Patterns 的中文翻译版本. 翻译的github地址: cyh24. 如有兴趣,可联系博主共同翻译,一起造(wu)福(dao)他人. 博客虽然水分很足,但是也算是博主的苦劳了, 如需转载,请附上本文链接,不甚感激! 本系列博客 <游戏编程模式>– 目录,可点击进入. 架构,性能与游戏 ============================ 在我们埋头研究一堆的设计模式之前,我想先告诉你,对于软件架构,我个

游戏开发手记:游戏逻辑模块组织及数据同步

这周工作主要分两部分,一是服务器这边的基础模块搭建,二是服务器与客户端通信模式以及数据同步等方案的协定和验证.总体来说进展不错. 服务器采用actor模式来构建,目前暂时把服务器上运行着的actor叫做service,每个service维护一个请求队列.一个goroutine不断取出请求并进行处理.一组负责处理消息的逻辑模块.游戏服务器里的每个玩家都是一个service,不隶属玩家的功能模块也作为service运行(如排行榜.聊天.公会),还有其他全局模块也作为独立的service运行(如玩家i

【游戏设计模式】之四 《游戏编程模式》读书笔记:全书内容梗概总结

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/53240330 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 本文的Github版本:QianMo/Reading-Notes/<游戏编程模式>读书笔记 这是一篇超过万字读书笔记,总结了<游戏编程模式>一书中所有章节与内容的知识梗概. 我们知道,游戏行业其实一直很缺一本系

Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局

Android实训案例(八)--单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就学习了一下,写篇博客梳理一下自己的思路,加深一下印象 视频链接:http://www.imooc.com/learn/641 一.棋盘 我们一看就知道,我们必须自定义View,这里我们定义一个GameView来做游戏主类,第一步,先测量,我们这里不难知道,五子棋他的棋盘是一个正方形,所以我们需要去测

传奇源码分析-客户端(游戏逻辑处理源分析四)

现在假设玩家开始操作游戏:传奇的客户端源代码工程WindHorn一.CWHApp派生CWHWindow和CWHDXGraphicWindow.二.CWHDefProcess派生出CloginProcess.CcharacterProcess.CgameProcess客户端WinMain调用CWHDXGraphicWindow g_xMainWnd;创建一个窗口.客户端CWHDXGraphicWindow在自己的Create函数中调用了CWHWindow的Create来创建窗口,然后再调用自己的C

传奇源码分析-客户端(游戏逻辑处理源分析五 服务器端响应)

器执行流程:(玩家走动) GameSrv服务器ProcessUserHuman线程处理玩家消息:遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObject->Operate()调用.判断玩家if (!m_fIsDead),如果已死,则发送_MSG_FAIL消息.我们在前面看到过,该消息是被优先处理的.否则则调用WalkTo,并发送_MSG_GOOD消息给客户端.Walk

传奇源码分析-客户端(游戏逻辑处理源分析三)

6. 接收怪物,商人,其它玩家的消息:ProcessUserHuman:(其它玩家-服务器处理)CPlayerObject->SearchViewRange();CPlayerObject->Operate();遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObject->Operate()调用.根据分发消息(RM_TURN)向客户端发送SM_TURN消息.

传奇源码分析-客户端(游戏逻辑处理源分析二)

5.接受登录成功后,接收GameSrv服务器发送的消息:接收GameGate发送的消息:CClientSocket::OnSocketMessage的FD_READ事件中,PacketQ.PushQ((BYTE*)pszPacket);把接收到的消息,压入PacketQ队列中.处理PacketQ队列数据是由CGameProcess::Load()时调用OnTimer在CGameProcess::OnTimer中处理的, 处理过程为:OnMessageReceive; ProcessPacket(

网页游戏运营模式研究

网页游戏的定义   网页游戏的英文名称为又称无客户端网络游戏,它是基于浏览器的网络在线多人互动的游戏,也是网络游戏的一种.这种游戏的特点是玩家无需下载游戏客户端及安装,只需短短的几秒钟就可打开网页用浏览器加载就能玩的网络游戏.尤其适合上班及没有时间休闲娱乐的人群,只要花一点点时间并且消费成本比较低,而且游戏内具有自动成长功能,玩家即使关掉电脑也可心满意足的去工作,如果想随时了解游戏内的具体情况,还有一些游戏具有短信提醒功能. 中国网页游戏从发展初期,再到如今的爆发式发展,中国网页游戏规模不断的扩