查看: 5246|回复: 10

[已经解决] 请教大家一个class的名称.new到底是啥意思, 有啥用途呐?

[复制链接]
梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
发表于 2021-6-16 06:01:10 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
比如在公共脚本里经常能看到$scene = Scene_一个class的名称.new,
请问下这个Scene_一个class的名称.new到底是啥意思呐?
梦石
0
星屑
12824
在线时间
1010 小时
注册时间
2019-11-5
回帖
2329

极短27参与极短25参与极短24参与

发表于 2021-6-16 07:59:46 | 显示全部楼层
本帖最后由 哇哇哇啊叭叭 于 2021-6-16 03:08 编辑

终于有个自己会的问题了:

  Xxx.new指新建实例,可以视为“某段脚本生效”的标志。要准确理解它的涵义,需要知道“类”和“实例”的定义
  在Xxx.new之前,必须有“Class Xxx”和其对应的"end",这表示“Xxx”这个“类”被定义,相当于盖楼有了张蓝图
  Xxx.new就是大楼了,在Ruby里是“实例”;一个类可以有多个实例,为方便调用,就以“$Xxx_x=Xxx.mew”、“$Xxx_x2=Xxx.new”等方式区分这些实例。“$”+"Xxx_xx"的格式是“全局变量”的固定格式,在此不多赘述了

[fold=举个栗子]
定义类
[pre lang="ruby"]class Sword

end[/pre]
新建类的实例
[pre lang="ruby"]$Sword_01=Sword.new[/pre]

[/fold]

评分

参与人数 2星屑 +50 赞 +2 收起 理由
RyanBern + 50 + 1 精品文章
taeckle + 1 多谢大神指点!

查看全部评分

风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复

使用道具 举报

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2021-6-16 18:09:56 | 显示全部楼层
进入战斗,敌人是两个史莱姆,史莱姆A和史莱姆B

史莱姆A的属性和技能和史莱姆B一模一样,
=> 他们属于同一个史莱姆“类(class)”

你攻击了史莱姆A,史莱姆A的血变少了,史莱姆B 虽然和史莱姆A一样都属于史莱姆,但是它的 HP 不会因为你攻击史莱姆A而变少
=> 他们是史莱姆类下各自独立的一个“实例”

这时候,第三个史莱姆C出现了
=> 通过 class.new 创建对应类的一个实例,例如 史莱姆C = 史莱姆.new

点评

咱问的这些技术都是最基本最基本的啦,对诸位大神来说都是小菜一碟  发表于 2021-6-17 03:28
每次都能在这种技术性帖子里看到你和zths大佬的身影,赞  发表于 2021-6-16 23:46
大神可以把这个史莱姆ABC的例子的代码写出来让咱学习学习吗,多谢了  发表于 2021-6-16 19:45

评分

参与人数 2星屑 +100 赞 +2 收起 理由
RyanBern + 100 + 1 认可答案
taeckle + 1 大神的指引!

查看全部评分

回复 1 0

使用道具 举报

梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
 楼主| 发表于 2021-6-16 23:05:56 | 显示全部楼层
哇哇哇啊叭叭 发表于 2021-6-16 07:59
终于有个自己会的问题了:

  Xxx.new指新建实例,可以视为“某段脚本生效”的标志。要准确理解它 ...

请问下在这个例子里$Xxx_x和$Xxx_x2有啥区别呢?不都是被Xxx.new赋值的嘛?为什么要搞一个$Xxx_x然后再搞一个$Xxx_x2出来呢?
回复

使用道具 举报

梦石
0
星屑
1273
在线时间
166 小时
注册时间
2021-5-29
回帖
75
发表于 2021-6-17 10:35:50 | 显示全部楼层
本帖最后由 Swanfal 于 2021-6-17 10:43 编辑
taeckle 发表于 2021-6-16 23:05
请问下在这个例子里$Xxx_x和$Xxx_x2有啥区别呢?不都是被Xxx.new赋值的嘛?为什么要搞一个$Xxx_x然后再搞 ...


你需要学习OOP基础,如https://www.cnblogs.com/qianduanshiping/p/6096053.html……
本来就是两个不同的对象,当然要重新创建一个变量去接收了
就好象两个史莱姆A和B是两个不同的对象,攻击A就应当只影响史莱姆A的血量,而不能攻击A的时候把B的血也扣了。
实际使用的时候比如$SlimeA.Damage(20)代表史莱姆A扣了20血,$SlimeB.Damage(20)代表史莱姆B扣了20血这样

评分

参与人数 2星屑 +50 赞 +2 收起 理由
RyanBern + 50 + 1 我很赞同
taeckle + 1 精品文章

查看全部评分

教你一个在任何 Discuz! 论坛的网页版里屏蔽别人的通用方法(谷歌火狐内核浏览器适用):
安装uBlock,在静态屏蔽规则里写上
rpg.blue##tr:has-text()
##前面是域名,括号内为需要屏蔽的id。随手写的规则,未测试各种边界条件,有兴趣可以自己修改验证。出现bug请尝试关闭插件。
已屏蔽id:清澈淌漾
打造清新简洁的信息茧房,获取快乐的论坛体验,从屏蔽拉黑开始。
看不顺眼,就大力屏蔽!让他再也不要出现在你的视线内!也欢迎各位屏蔽我。
回复

使用道具 举报

梦石
0
星屑
12824
在线时间
1010 小时
注册时间
2019-11-5
回帖
2329

极短27参与极短25参与极短24参与

发表于 2021-6-17 11:30:48 | 显示全部楼层
taeckle 发表于 2021-6-16 18:05
请问下在这个例子里$Xxx_x和$Xxx_x2有啥区别呢?不都是被Xxx.new赋值的嘛?为什么要搞一个$Xxx_x然后再搞 ...

  也不是不可以,就是太麻烦。5楼说的对。

  若游戏需要出现多个同蓝图的不同实例,就必须使用不同变量进行区分;入:$1 = Sword.new,$2 = Sword.new,这样能够保证$1在变化时,并不影响$2的状态
  用$1=Sword1.new , $2=Sword2.new ...(class Sword1 等同于class Sword2、class Sword3、class Sword4...)这样也可以,就是太浪费了


评分

参与人数 1赞 +1 收起 理由
taeckle + 1 精品文章

查看全部评分

风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复

使用道具 举报

梦石
0
星屑
4082
在线时间
302 小时
注册时间
2019-4-23
回帖
185
发表于 2021-6-17 11:39:58 | 显示全部楼层
class是模版
new class是实体

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 精品文章

查看全部评分

回复

使用道具 举报

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2021-6-17 22:36:06 | 显示全部楼层
喵呜喵5 发表于 2021-6-16 18:09
进入战斗,敌人是两个史莱姆,史莱姆A和史莱姆B

史莱姆A的属性和技能和史莱姆B一模一样,

[pre lang="ruby"]class Slime
  def appear   
    @hp = 100
    print("野生的史莱姆跳出来了")
  end
  def status
    print("史莱姆当前的hp是#{@hp}")
  end
  def attack
    print("史莱姆向你发起了攻击")
  end
  def damage
    @hp -= 5
    print("你攻击了史莱姆,造成了5点伤害")
  end
end

a = Slime.new
b = Slime.new

a.appear
b.appear

a.attack
b.attack

a.status
b.status

a.damage

a.status
b.status

c = Slime.new
c.appear
c.attack
c.status
[/pre]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部