RPG类型游戏—1

news/2024/12/28 17:53:41/

    现在中国游戏市场出现了好多那种中国类型的RPG类型的游戏,我自己也有几份那样的代码,在看他们代码的时候,觉得他们的代码编写有一个通病,就是写的太过于臃肿不够简洁,代码的移植性也不是很高,如果做同一类型的RPG的话,我感觉有种重做的感觉。所以就自己写一个这种游戏的通用型的框架一样。

   首先我们对RPG类型的人物进行分析吧,我看到的一般RPG类型的游戏主要有怪物,主角等。可以来说的就是有生命特征的和没有生命特征的。对于一个有生命的个体来说,它在游戏中是不是有最基本的属性,例如移动属性,攻击属性,受伤属性。应该就有这些吧,当然还可以拥有buff属性。我把动画这部分也应该考虑拿出来,几个属性之间肯定是会存在着某种联系的,例如buff会给生命个体增加它的攻击属性,或者增加它的受伤属性啊,当然这些得看你的游戏怎么设计了,我假设红buff增加人物的暴击伤害,和暴击率等。蓝buff会增加人物的血量,或者减技能的cd等,这些都是我们要考虑的,但是一个成功的RPG游戏,在我看来最大的亮点在于动作的华丽,技能的连招,我看好多国人做的RPG类型的游戏都是在模仿lol,以我的观点,手机的最大的亮点就在于触屏,所以我觉得做手机游戏应该充分利用这点,跑酷类游戏,消除类游戏它们就做的非常不错。这些仅仅是我的观点,好了,扯了好久的野棉花了。该说今天的正题了。

   接下来我们就每个人物属性去建立相应的类,这样写分工是很明确的,我的一个属性和另外一个属性它们是一种低耦合的状态。在unity里面我习惯给他们起一个名字叫做组件。下面就一次介绍它们:

  1  MoveCpt

      移动的组件,定义2个属性:移动速度和移动方向。定义一个2个方法:一个初始化方法Intilized,主要功能完成前面2个属性的初始化。一个拥有update功能的方法MoveByDirection。这个组功能非常简单,就是完成移动功能。

  2  CanExportCpt

      攻击组件,定义2个属性:含有攻击数据的攻击属性和一个敌我类型的枚举类型,先定义2个方法:一个初始化方法Intilized,主要完成人物的一些基本属性,例如攻击力,攻击速度,暴击伤害等一些数据,一个攻击方法Attack方法,主要是攻击敌人。攻击属性和受伤属性的紧密相连的,所以攻击方法其实是调用敌人的受伤方法。这里攻击属性可能会和属性组件产生一定的关联,例如人物拥有红buff提高人物的攻击力,攻击速度等等,人物拥有蓝buff属性,减少人物技能的cd等等,攻击组件有一定的依赖关系依赖于属性组件。所以我们该定义一个接口来定义一个方法解决这种依赖关系,让攻击组件依赖这个组件,而属性只用调用接口方法即可,再让攻击组件继承该接口,这种低耦合的关系就建立起来,当一个类对另外一个的依赖关系是不会经常发生变化,我们可以建立一种强依赖的关系,反之,我们就要建立一种强依赖的关系。

  3  AcceptAttackableCpt

      受伤组件,定义2个属性:含有受伤数据的受伤属性和一个敌我类型的枚举类型,先定义2个方法:一个初始化Intilized,主要完成人物的一些基本属性,例如血量,血量回复,护甲,魔抗等等一系列的属性。另外一个就是 GetHurt方法,完成人物受攻击的时血量的计算。

  4  TriggerCpt

       触发器组件,这个是检测人物与其他的事物发生碰撞,例如和子弹,箭,法术技能,刀,这些都是能触发触发器的一些东西,总之他们是把他们归为一类东西即可。定义2个方法,一个初始化方法Intilized,和一个继承来自 MonoBehaviour的模板方法OnTriggerEnter2D。

当我们东西触发触发器时,我们对首先对触发器的类型进行判断,判断是敌方还是友方,如果是当前触发器碰撞触碰的是地板,那么说明当前触发器时挂在子弹,法术技能的东西,而不是挂在人物上的,所以这个触发器是整个游戏中通用,不止简单处理人物和子弹。

  5   PlayAniCpt

       播放动画的组件,定义一个属性,这个属性是根据你用的是什么动画系统,如果是老的动画的系统,那么这个属性就是Animation反之就是animtor了。先定义一个初始化方法,对属性进行赋值。另外几个方法,就是根据游戏而定了,如果你的游戏中存在多少种动画的过渡,例如存在由走到跑,那么久需要定义这样一个方法,存在平A到的连招,那么你也需要为其设计方法,存在这多少种动画的过渡就需要写几个,所以国外传统的RPG玩的是动作,效果和打击感,而不是像国内的RPG,感觉玩的的数值,所以做这种游戏美工起到关键性的作用,它不像那种休闲类型的游戏,程序的作用就比美工重要的多,如果想做好RPG这种类型游戏,动画这个组件动画过渡方法要设计好。

   6  PropertyCpt

       这个组件就类似与那种buff系统了,当然这里还要去写一个计时器的类,来方便处理buff节能冷却。应该有几个组件依赖与这个组件,这里定义2个方法:一个初始化方法Intilized,初始化各种属性的初始值。另外一个类似update方法——OnUpdate方法。

    前面只是一个个的组件,他们看起来是一个一个零散的组件,所以我们这里要去写一个管理类,去管理所有的组件,它在设计上来说就像一个根节点,而这些组件就像是一个叶子节点,采用聚合的方式,当在运行来说就像是一个河流然后分流到各条小溪,如果河流没水了那么各条小溪也就没水了。首先由这个管理类来统一初始化各个组件,统一update,采用的是一种update分发的原理,这样便于我们对整个游戏逻辑的控制。这种方式才是unity官方支持的一种,所以我为什么不在属性组件,移动组件中不写update而用OnUpdate代替。我们这类代码的时候,应该保持清醒的头脑,去分析事物之间的联系,分清楚他们之间的职责和依赖关系,还有就是我们尽量去写那种像树类型结构的代码,而不是网。如果是你个人开发你可以把代码写的跟网一样,但是我相信如果你隔一段时间再去看你的代码的时候,你要看懂是会很吃力的。下面我将给出具体设计想法。


http://www.ppmy.cn/news/578815.html

相关文章

RPG小游戏

#导包 import time import random 与学姐的台词 SCRIPT_NPC_SCHOOL_SISTER [你好!,你好!,你是新生吗?,是的,想要我教你魔法吗?,\n1、好的 \\n2、不用了吧,我不和学姐学魔法!\n]世界里的魔法清单 MAGIC_BOOKS [ [火…

RPG游戏-任务系统

一、前置部分 (一)、协议部分 enum QUEST_STATUS {IN_PROGRESS 0;//已接受,未完成COMPLATED 1;//已完成,未提交FINISHED 2;//已完成,已提交FAILED 3;//已失败 }enum QUEST_LIST_TYPE {ALL 0;IN_PROGRESS 1;FI…

Java实现RPG游戏

一.实验目的 掌握面向对象程序设计的方法。 明确类与对象的概念,掌握面向对象设计七大原则;掌握常见的设计模式以及类图的描述。 二、UML类图 三、实验要求 1.功能描述几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型&…

RPG

J2ME RPG游戏边学边做(一)   笔者以前是做j2ee的,一个月前由于兴趣所致开始利用业余时间学习j2me游戏开发。在网上看了一通教程后,便准备动手一边学一边做一个简单的rpg游戏。虽然起点比较高,但感觉游戏难度越大&…

rpg游戏发展史计算机网络,PC Gamer盘点史上最经典RPG游戏TOP15

RPG角色演类游戏往往能带给玩家史诗般的剧情和难忘的战斗体验,今天外媒PC Gamer盘点了史上最经典RPG游戏TOP15,让我们一起来看看吧! 第 2 页 史上最经典15大RPG 2 6.《质量效应2(Mass Effect 2)》 发行时间: 2010年 发行商: BioWare 与第一…

堪比端游 欧美十大RPG网页游戏推荐

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 你喜欢RPG游戏吗?大多数玩家的…

rpg人物制作软件_能够自己DIY角色的rpg游戏-可以自己DIY角色的rpg游戏大全_飞翔游戏专题...

V1.0 安卓版 一款以文字修仙为主题的角色扮演手游 莽荒封神纪是一款以文字修仙为主题的角色扮演手游,唯美的场景设计,丰富特色的玩法,可灵根修炼、洪荒探索,还原一个真实的莽荒世界,感兴趣的玩家赶紧来下载莽荒封神纪官…

java做RPG小游戏

题目 java课设,一个游戏中有多种角色(Character),例如:国王(King)、皇后(Queen)、骑士(Knight)、老怪(Troll)。 角色之间可能要发生战斗(fight)&…