查看: 2827|回复: 1

[已经解决] Sprite_Battler的改写问题

[复制链接]
梦石
0
星屑
82
在线时间
124 小时
注册时间
2011-10-6
回帖
17
发表于 2021-3-31 08:52:35 | 显示全部楼层 |阅读模式

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

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

×
Sprite_Battler#update中
[pre lang="ruby"]
if @battler.battler_name != @battler_name or#####1
   @battler.battler_hue != @battler_hue
    # 获取、设置位图
    @battler_name = @battler.battler_name
    @battler_hue = @battler.battler_hue
    self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
    @width = bitmap.width
    @height = bitmap.height
    self.ox = @width / 2
    self.oy = @height
    # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
    if @battler.dead? or @battler.hidden
      self.opacity = 0
    end
end
if @battler.hp != @battler_hp#####2
   @battler_hp = @battler.hp
   p 1
end
if @battler.states != @battler_states#####3
   @battler_states = @battler.states
   p 2
end
if Input.trigger?(Input::A)
  @battler.states.push(3)#####4
  p @battler_states#=>[3],'p 2'没有弹窗
end
[/pre]
我仿照#####1处结构写了#####2和#####3,#####2处每次@battler.hp更改都可以正常调用'p 1',#####3处@battler.states更改只有第一次能调用'p 2',即@battler_states==nil和@battler.states==[]的时候,第一次调用后,@battler_states==[]和@battler.states==[]。此后再次更改@battler.states,比如#####4处,@battler.states.push(3),无法调用'p 2',但是'p @battler_states'结果是[3],像是执行了'@battler_states = @battler.states'。想不明白,也不知道搜什么,此问,谢谢
梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2021-3-31 10:13:39 | 显示全部楼层
因为, @battler.states是"对象"而不是"返回值"

if @battler.states != @battler_states#####3
   @battler_states = @battler.states
   p 2
end

你这句就是把 @battler_states "绑定" @battler.states 这个对象, 那自然, 除了第一次 @battler_states是nil,因此 != @battler.states 判定有效外, 其他时候, ==都是成立的, 因为就是"同一个人"嘛

举个栗子, 今天改名叫张三,明天改名叫李四, 你不一样还是你,  而你今天带个帽子,明天披个披风, 那对 你 == 你 这个判定有影响么?

那怎么才能让判定生效?

if @battler.states != @battler_states#####3
   @battler_states = @battler.states.dup
   p 2
end

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部