Project1

标题: 请教大家一个class的名称.new到底是啥意思, 有啥用途呐? [打印本页]

作者: taeckle    时间: 2021-6-16 06:01
标题: 请教大家一个class的名称.new到底是啥意思, 有啥用途呐?
比如在公共脚本里经常能看到$scene = Scene_一个class的名称.new
请问下这个Scene_一个class的名称.new到底是啥意思呐?
作者: 哇哇哇啊叭叭    时间: 2021-6-16 07:59
本帖最后由 哇哇哇啊叭叭 于 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"的格式是“全局变量”的固定格式,在此不多赘述了

举个栗子

作者: 喵呜喵5    时间: 2021-6-16 18:09
进入战斗,敌人是两个史莱姆,史莱姆A和史莱姆B

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

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

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

作者: taeckle    时间: 2021-6-16 23:05
哇哇哇啊叭叭 发表于 2021-6-16 07:59
终于有个自己会的问题了:

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

请问下在这个例子里$Xxx_x和$Xxx_x2有啥区别呢?不都是被Xxx.new赋值的嘛?为什么要搞一个$Xxx_x然后再搞一个$Xxx_x2出来呢?
作者: Swanfal    时间: 2021-6-17 10:35
本帖最后由 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血这样
作者: 哇哇哇啊叭叭    时间: 2021-6-17 11:30
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...)这样也可以,就是太浪费了



作者: q3226257    时间: 2021-6-17 11:39
class是模版
new class是实体

作者: 喵呜喵5    时间: 2021-6-17 22:36
喵呜喵5 发表于 2021-6-16 18:09
进入战斗,敌人是两个史莱姆,史莱姆A和史莱姆B

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

RUBY 代码复制
  1. class Slime
  2.   def appear   
  3.     @hp = 100
  4.     print("野生的史莱姆跳出来了")
  5.   end
  6.   def status
  7.     print("史莱姆当前的hp是#{@hp}")
  8.   end
  9.   def attack
  10.     print("史莱姆向你发起了攻击")
  11.   end
  12.   def damage
  13.     @hp -= 5
  14.     print("你攻击了史莱姆,造成了5点伤害")
  15.   end
  16. end
  17.  
  18. a = Slime.new
  19. b = Slime.new
  20.  
  21. a.appear
  22. b.appear
  23.  
  24. a.attack
  25. b.attack
  26.  
  27. a.status
  28. b.status
  29.  
  30. a.damage
  31.  
  32. a.status
  33. b.status
  34.  
  35. c = Slime.new
  36. c.appear
  37. c.attack
  38. c.status





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1