幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2971|回复: 0

[教程] 接触父类的用法

[复制链接]

335

主题

782

帖子

1万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
12742
发表于 2009-8-21 21:24:06 | 显示全部楼层 |阅读模式
以下是类的介绍 (出自《游戏论》)
类也就是种类的意思,同面向对象编程思想中的类的意思相同,具有多个属性及多个规则。每个属性的取值的一个组合,称为类的一个实例,也叫一个对象。如:桌子类,有桌脚数和颜色两个属性,则该类的某个实例可能为四只脚、红色,则我们可以说这个实例表示一张四只脚的红色的桌子。     

人的记忆力很差,不能记住千变万化的东西,如一幅画。但人又经常需要一看到某个东西时,能搜出它的大致资料,于是,人想出了种类。人将他们看到过的形形色色的东西进行归类,这样当人看到一个东西时,他不再去想这个东西是什么,而是想它是种什么东西。

因为种类的数量远远少于东西的数量,所以人可以很快找到所想物体是哪种东西,也就很快得到此物体的大致信息。应注意,当将种类分得很细的时候,也就不存在种类了,或可以认为一个种类就是一个物体。     

在象棋游戏中,如前所述,有如下的游戏元素:   
1. 某枚棋子的位置。   
2. 某枚棋子是否存活。   
3. 某枚棋子的种类。   
4. 该哪方走棋。   

其中的1、2、3游戏元素逻辑上表示的是同一种东西(棋子)的状态,所以在这里我们就应该定义一个类——棋子。其属性有三个:位置、是否存活和种类。这样我们就可以说这个象棋游戏只有33个游戏元素(象棋有32个棋子),而原来它有97个游戏元素,显得更简单了。     

注意,类的存在不是必要的,它只是为了让人更好的了解游戏规则而人为定义出来的,只是为了使纷繁的游戏元素有条有理。

所以不同的人可以定出不同的类,这样好象显得类没有多大意义,所幸的是大部分人经常都会有大部分相同的类的定义,如象棋,几乎每个人都下意识的定了棋子这个类。

而对于复杂点的游戏,如RPG游戏,有些人就只定了加魔法的药和加血的药,而有些人就定的是药,可加血、魔法值、火属性等,将其视为一个类,而不加细分。通常后者是程序员而前者是玩家。     

还应发现,游戏规则不定义任何的类,但游戏规则毕竟大多数是人定的,所以在规则的描述时都大量的使用了类。几乎任何棋类游戏都有棋子这个类。     

有些规则是专门针对某一个类的,我们将这些规则称为这个类的规则。如象棋中的马走日、象飞田,都涉及到了棋子类中的种类这个属性。这里就有了一个问题:这个规则到底是属于哪个类的。

因为有些规则可能涉及到了多个类的属性,如RPG游戏中的,玩家攻击到敌人后,敌人的生命值减去玩家的攻击力的数值。此处就涉及到了玩家这个类的攻击力的属性和敌人这个类的生命值的属性。在此我们认为:规则的主语是哪个类的属性就是哪个类的规则。所以上述的规则应为敌人的规则。


举个 gamemaker 里使用 parent 的例子。

步骤1:

定义一个叫做 parent_fighter 的 object ;

create event (创建事件)
  1. direction=90;
  2. speed=5;
复制代码


步骤2:

再定义一个叫做 fighter 的 object ;

在物体的窗口左侧,选择 parent 为 parent_fighter 。 (好比这是 parent_fighter 的孩子)

其他什么也不用写,这样把 fighter 放到房间里,会发现它有了 parent_fighter 的一切属性:向正上方以速度5运动。

现在我们应该可以理解这个父类的概念了:父类的代码会进行传承。

如果再稍微进阶一些,可以看看下边的步骤3。

步骤3:

如果我们做一些修改

fighter 的 create event (创建事件)
  1. event_inherited() //继承父类物体同一事件中的动作
  2. direction = random(360)
复制代码

这样把fighter放到房间里,会发现它以速度 5 向随机方向运动。

机制如下:

fighter 首先先天继承了 parent_fighter 的一切属性,自己又后天设定了 direction = random(360) 。。

这相当于直接在没有 parent 的 fighter 的 create event (创建事件) 里写:
  1. direction=90;
  2. speed=5;
  3. direction=random(360); //参数direction覆盖了前边的赋值。
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-20 23:22 , Processed in 0.021322 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表