首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于MVC的论述

这篇是关于游戏开发的内容。今天有人在QQ上问我游戏开发的学习方法,我提出来的一个见解,想到微信公众号也有好多天没有已更新了,就用这个话题来写一写吧。本来还打算准备一些素材图片的,发现电脑中合适的素材并不多。那就直接文字描述吧。但愿依然能够有一个合适的理解。闲话少说,直接正文。

MVC,很多程序开发都有一个很刻板的说明。但是那种晦涩的概念的确是让人有很多不爽。大概只是知道MVC三个字母分别是指,模型,视图,控制器。除此之外一阵头疼。不过我还是希望今天的论述能够给你解决一些困惑。

先说模型(M),其实指的就是数据模型,所有游戏的灵魂所在。电脑的核心概念就是数据,无论怎么玩,最终都会归结为数据的控制。而控制的数据无非只有三种,数字,布尔和字符串,数字和布尔是状态内容的核心控制手段,字符串则是信息的呈现。举一个简单的例子,比如说玩过《王者荣耀》的人都知道,你的角色在游戏过程中会有很多的状态,而是否存活就是一种布尔状态。而决定是否存活的血量值,其实就是一种数字状态。而诸如“您已经被XX玩家击杀”这样的呈现内容则称之为字符串信息呈现。当然,为了方便,可能还有数组,集合等内容的参与,但这些内容细分下去,依然逃不掉数字、布尔或者字符串的类型。而游戏之所以在不断的发展,可以玩下去,无非就是游戏的某些数据不断的改变。从而呈现出新的内容。数据是游戏的司令部,决定游戏中的所有事儿,并且有自己的一套原则,勤务兵(控制器)前来报告,如果触动了他的原则他会做出相应的处理(改变)。最关注数据状况的便是视图,他时刻监视着数据的动向,相时而动。

视图(V),视图是什么,我们能看到的游戏内容,当然也包括声音和其他所有可以让我们直接感知到的那部分内容。比如我说,数字是什么颜色的,你肯定回答不出来。但是如果这个数字是呈现在游戏界面上的,你一定可以给我一个准确的答案。抽象出来的数字,那是数据模型,当然无法描述了。如果把数据模型比喻做大脑,那么视图就相当于人的肉体,视图的呈现状况完全由数据模型决定。并且时刻监控者数据的变化,根据数据的变化,无条件改变自身。比如我们将控制角色坐标数据修改一下,则视图可以立即发现这一更改。于是,视图上的角色从一个位置变化到达了另外一个位置。

游戏与视频动画有一个最重要的区别,那就是游戏具有很强的参与感。《熊出没》很好看,但是你不能控制熊大熊二,更是不能为光头强做主。只能作为第三者去观看作者的设计。动画的数据都是自动改变的,或者说预先设计好的。但是游戏不一样,要想玩转游戏,我们得有与游戏之间的互动。比如,电脑游戏,我们要拿起鼠标,按动键盘,手机游戏,我们要在屏幕上指指点点。这是改变游戏进程的重要方式。比如,我按下鼠标,屏幕上我控制的角色勾动了扳机,射出子弹。这就是我们说的第三部分内容。控制器(C),控制器是什么,是我们描述玩家操作的信息,作为控制器,他可以视为是数据模型的勤务兵,当玩家触动了鼠标,键盘,或者手机屏幕手势,勤务兵就会立即将这个触动信息通知给数据模型。而数据模型则根据自身状况,决定是否更改。如果更改。则继而带动视图的更改。游戏便这样发展下去了。

通过一些文字,简单的说了一下MVC的大概含义,他其实是游戏开发中最重要的一环。游戏结构设计的质量好坏,直接决定了你的游戏到底健不健康,能不能走远。在实际开发中,很多时候,不见得完全遵从这一原则。但是大概的基本保持是很有必要的。这样设计出来的游戏,无论是更新维护都会特别方便。

比如说我要做一个简单的案例。界面上包含两个钟表和一个切换按钮,最开始的时候,界面显示普通钟表状态,点一下切换按钮,变成数字钟表状态,再点一下,再变回普通钟表状态。以此循环。那么我们就要考虑一下,在这个例子中,包括哪些核心的数据模型呢。

时间,肯定是最重要的了,他是一连串数字的组合,几点,几分,几秒,等等。自然便是数字状态。而对于这个例子,有一个控制呈现的是普通钟表还是数字钟表状态的变量,如果只有两种状态。完全可以使用一个布尔来完成,那就是布尔状态,但是如果超过两个,我们可以使用数字状态。数组状态或者集合状态等等。当然,后面只是数字状态的变种。

那么这个例子中的视图是什么呢。自然是我们可以直接看到的两块钟表,还有那个孤零零的按钮。如果你想把钟表滴答滴答的声音加上,那么他也是视图的一部分。视图首先肯定是要监视着那个表示时间的数据模型的,因为无论是哪一块钟表,都需要根据这个数据来决定自己走到几点了。另外还有一个决定呈现哪块钟表的数据,当然就是那个布尔变量,视图时刻监视着这个变量,这个变量变了,则呈现的钟表就变了。

最后还有一个控制器,这个案例的控制器很简单,就是一个对切换按钮的点击操作。一旦用户点击这个按钮了,就立即将这件事儿通知给数据模型。数据模型接收到了这个点击信息,接下来做的便是根据自身情况决定是否变更那个控制呈现的布尔值。如果没有其他限制,则将这个布尔值反转。

这样,这个钟表的例子便轻易的就可以分析清楚了。当然,他再简单不过了。要想了解MVC,可能你需要分析更多的游戏,能将他的数据模型提出来,视图层提出来,并分析每一个数据是什么样的数据模型。这一点很重要。如果有可能,你可以找一些复杂度很高的游戏进行剖析。当你发现这些内容已经So easy了,那么恭喜你。你已经有了新的突破了。

今天就说这么多吧,希望所有的朋友每一天都能有新的收获。未来的路越走越宽阔。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180413G1OWB100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券