求教 塔防游戏,基础类框架,用逻辑类+UI控制类的方式,发现问题

类层次关系如下

思路是:
塔防层 组合 逻辑类与UI控制类,确保数据与显示正确的逻辑
UI控制类 用于控制 怪物 塔 子弹 图片及动画 运动
UI下的 怪物 塔 子弹 类用于控制 图片 和 动画的生成

逻辑类 用于 计算 怪物 塔 子弹 之间的游戏逻辑,比如怪物撞到塔了减血,塔发射子弹了(位置、目标、攻击力等),怪物被攻击了(击中没、受多少伤害、是否触发死亡效果等) ,就诸如此类的逻辑。
逻辑类下的 怪物 塔 子弹 类用于封装他们自己的逻辑数据

逻辑类,拥有一套属于 塔 怪物 子弹 的 逻辑属性,比如移动速度,攻击力等。
UI类,也有一套UI属性,比如图片boundingBox() (是否需要修正,是所有修正,还是个别修正),怪物移动动画是否协调(两帧播放一张?或者三帧播一张?)

这样写分离了 UI 和 逻辑
但是 你一个对象类型,拥有 两个类型去描述,这样是不是破坏了面向对象的封装原则。
比如怪物类,移动速度,攻击力,位置,图片,动画,这些属性 都是属于怪物本身的,对外应该是不可见的,外面能看见的应该只是封装后的表现。

如果分UI 和逻辑来写游戏,是不是就破坏了面向对象的规则呢??

还有我这个类框架对于塔防游戏模块,是否合适??有没有更好的办法??

有经验的大神指导一下哈,写代码,写着写着出现了这种迷惑,突然就无法下手了,怕写完了,又要被全部推导从来,希望在重来之前,把疑惑扼杀在苗头期。

如果不能驾驭模式…为了套用mvc设计模式去做最后就会发现 一团糟, 而且只能重写了…

跟我的捕鱼差不多,但是我就简单简单粗暴。子弹一个类,creator里面创建好子弹预制,挂上子弹类就ok了。鱼是一个类,同样的预制挂上脚本ok,然后炮台一个类,预制+脚本,最后game脚本是游戏总控制逻辑,负责初始化游戏场景,创建鱼,炮台,加载配置文件,控制游戏进度等。不知道你的UI类和逻辑类是什么概念

我觉得生搬硬套模式一点卵用没有,完全是在浪费时间。MVC模式不是处处都使用的,做ERP系统可能比较好一点,做游戏感觉完全是浪费时间。

这点我赞同, 我在一个德州扑克尝试了下mvc, 写好后改bug时全删了,直接堆代码重写了…

用三层结构写游戏可能会好点,数据—逻辑—表现。硬套mvc有点尬。

怎么就说着,我成了生搬硬套了呢。。。 我上一个话题,有个人提示我,把逻辑和UI分开写,我试了试好用,就用了。 现在第二模块准备继续用,发现了点问题,就提了出来,MVC我只听过名字,没去看过这类的介绍或者代码,你说我搬套,我去哪套呢。
可能我没说清楚,你们不理解我这样写有什么意义, 我描述一个细节,你们能明白点
如果 UI 和 逻辑绑到一起 ,一个消消乐的游戏 当我的棋子发生移动, 那么 总控逻辑类 要改变棋子的坐标+产生移动动画+移动前 移动中 移动后 对周围 目标产生的影响逻辑+产生影响的动画,这些东西全部绑一起,因为设计角度出发点,你的类,有逻辑和UI是绑在一起的。 移动次序,在只有1,2种棋子的时候,还能控制,当有10种,20种,甚至棋子与棋子之间的有隔板,有的隔板限制移动,有的隔板反转移动,那么移动次序非常难控制了,为什么?因为,逻辑和UI绑在一起,你改逻辑代码的时候,也要改UI代码,开始一个sequence +runaction 可以搞定,但是移动次序不同啊,你又不得不 加delaytime , 加隔板了啊,有反转移动, 你又得 stopaction,再计算新的移动轨迹,再 sequence runaction +delaytime 。这个时候,策划又说了,现在这个隔板不反转了,你不得不又要改 逻辑,又要改UI。
逻辑跟UI分开的好处是,,UI只纯粹控制移动,放动画。 逻辑 只处理纯数据,正确的处理一次格子的移动,然后保存成数据,一步一步,全部移动完,就形成了一个棋盘单位的移动队列,然后 UI来播放这个队列。
我用的后面这种方法,加了15种棋子 4种隔板, 每种逻辑都不一样,我发现,每加一种,UI只是获取图片不一样,其他绑定动画,碰撞体积修正,播放次序都不用改了。
用改的只是处理数据的逻辑, 而且发现逻辑非常好写了,因为道具变成了,纯数据,我只处理数据,动画表现的事都丢给动画控制去做了,写逻辑会变得非常纯粹,甚至于纯粹到,我逻辑控制这块,不用去考虑COCOS的类跟函数了,游戏可以往其他2D引擎上挂,只用改UI接口这个位置的相关函数,逻辑处理一行代码都不用改。 这种设计达到的效果,是我需要的,可能前期设计框架的时候,是费神的,但是,我写完了一个模块,大部分类,没有include cocos2dx ,没有继承Node,只是纯粹的c++类的时候,代码的移植性,扩展性,的确是高的。 这样写东西,能给我带来了好处,用他就好了,谁发明的,谁制定的规则,对我来说不重要,设计这种东西,从来只注重适用性,好用就用,不好用就不用。关键是发现不好用的时间点,能不能吃一寸长一智,所以我发现这个设计思路,对于塔防可能有点问题,想问问有经验的人有没有更好的思路。。

1赞

m c v 是什么,我不太清除诶。。。

你不知道mvc?

百度知道mvc

1赞

不太想去了解哈,暂时用不上

你还是去了解mvc吧。你要是用cocos2dx,用面向对象的方式编程,你必须学mvc。

你看过《设计模式》吗?

你觉得我的设计有耦合问题,请指出来,问题点是什么? 你的更好的方法是什么?
你回答给我的感觉,刻意为了设计成mvc 去mvc,不太适合吧。还是那句话,选择适合就好的选择,恰到好处。

你现在用得就是mvc的主要思想。逻辑和表现分离,逻辑复用。你现在的情况是不知道何时解耦、何时耦合,自己想出一个逻辑和表现分离的东西,不知道合适不合适,你既然说了逻辑和表现分离,大家第一个想到的就是经典的mvc。

前面大哥以为你要硬套mvc,然后告诉你,随意用,然后我说了解下三层架构是什么,别严格硬套mvc。到此,大家都以为你了解mvc。但是,发现你并不知道mvc是什么。你自己用了,你自己都不知道,你为什么不站在巨人的肩膀上?非要自己去再发明一次“mvc”?mvc不是定理公式,是一种编程经验,你根据mvc的思想对自己的项目进行改进。

所以,我推荐你去了解一下mvc等等架构模式,看看别人是怎么做得。

你现在困惑,就是因为你没看过《设计模式》这本书。

mvc我是真不知道,23种设计模式这本书也是真没看。 不过我刚才看了你说的三层模式,感觉可以解决我这个问题, UI控制类在最上层 ,中间放逻辑类,底层放 塔 怪物 子弹 的数据类,这个思路应该可以解决我的问题,如果不能解决,我会去看看mvc的 。 设计模式,我感觉不了解,比了解更好,我没看过设计模式,但是看cocos的 create 和 getinstance ,感受到了易用和易管理,我就会用了, 我用在自己的模块了,很方便。 每个人有每个人的学习方法哈,我习惯通过代码学习框架和思想,不喜欢啃书哈。

可能有个语义不明,为什么不了解,比了解更好。 因为根据我的习惯,任何事物的双面性,包括经验和知识,经验的反面,会让你失去很多尝试,有些也许是经验让你少走弯路,有些也许失去了一次机会,机会是什么,看你的做的是什么事情。知识的反面,是束缚,知识拥有的越多,考虑的东西也越全面,写一句代码的时候考虑的问题也就越多,大多数人都认为,考虑全面肯定是好的,知识面广也是好的,很少人会去考虑束缚的问题。但是每拥有一个知识点,就无形的给自己上了框,你每写一句代码都会变得很小心,为什么?因为你拥有这一块知识点,你知道什么是好的,什么是不好的。 除非你有把握,能在有限的生命里,把所有给自己上的框,跳出来,否则你知识反而成了你,编码的阻力了。
我只去了解,我目前用到的东西,发现问题解决不了了,再去了解一点点, 我很小心翼翼的给自己上枷锁,或者去获取更多知识,只有在不得不这样的情况下,我才会去这样做。 这样做的目的,是保持编码的初心。 你第一次在电脑上打印 hello world 的喜悦,你现在还拥有么?
我每天都能拥有这种感觉。 所以 我写代码是快乐的,而且乐在其中,虽然这样的反面是,知识面很窄,但是 合适就行了,不够了,再来问,问了再去学,其他的东西谁在乎呢?

1赞

《设计模式》这本书不是程序员必备书籍嘛?你不看书,开玩笑呢,大兄弟,23种设计模式就是解决架构耦合的问题的。怎么可能不看。这本书就是圣经。你光学会编程语言是不行的,是没有工程能力的,你必须学设计模式(OOP编程经验)。你现在要做项目,但是对于编程经验欠缺,所以我推荐你去了解mvc、三层架构,了解两种个常用的架构模式(还有其它的架构模式)。快速运用到工作里来。你花一晚上看看mvc,第二天就超神了,为啥不看?

这是前人用面向对象语言编程时总结下来的解耦经验,虽然大家说不要硬套设计模式,但是你不了解这些模式,你怎么随心所欲的设计。

你没有意识到设计模式的重要性。

不是,你不是程序员嘛?讲道理,编程是个经验技术活,怎么变成情感体验节目了?

我稍微能理解,你的想法了。
如果说,从加速实现,获取结果的角度考虑,所有的代码,都用别人定好的框架,设计模式,当然是好的。
但是你用别人的,总是要遵守别人的准则,就说耦合性问题, 设计要求高内聚低耦合。 你不去试试低内聚高耦合,你怎么明白个中滋味? 我自己去试一遍,感受过了,是不是再来看看这些书,理解的就会多那么一点点?
我要表达的意思就是,编程应该注重的是,搭框架和写代码的过程,结果反而是附属品了,成功了是缘份,没成功吸取教训。 估计有人有我这个想法,中国大部分老板都要炒他鱿鱼。不过你要把你写的东西,当成自己儿子,没有人能说你对,说你错,只有合不合适。 你凭什么让别人来批判,你的表达?

你这,有点逗啊。

绝了。

我真是闲。

抱歉,打扰了。