查看: 2039|回复: 7

[已经解决] 如何让开关控制CP制御AX追加的显示头像

[复制链接]
梦石
0
星屑
74
在线时间
205 小时
注册时间
2010-12-16
回帖
131
发表于 2014-8-13 22:09:06 | 显示全部楼层 |阅读模式

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

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

×
我想要这个代码能够实现“当某个开关开启时改变某一个人物的ICONS”,并且是在战斗中能够即时改变。请问可以做到吗?
如果事件可以做到的话,也请告诉我——!


[pre lang="ruby" line="1"]# ▼▲▼ XRXS65A. CP制御ターンシステム「シンセ・ゲージ」 ▼▲▼ built201202
# by 桜雅 在土

#==============================================================================
# □ カスタマイズポイント
#==============================================================================
class XRXS65A
  #--------------------------------------------------------------------------
  # 「アイコン設定」
  #--------------------------------------------------------------------------
  DEFAULT = "Enemy" # ディフォルトアイコン
  # アイコンハッシュ  記述方式 : アクターID=>アイコン名
  ICONS = {
    1=>"SNOW",
    2=>"SNOW",
    3=>"SNOW",
    4=>"SNOW",
    5=>"z3",
    6=>"z1",
    }
  # アイコンハッシュE  記述方式 : エネミーID=>アイコン名
  ICONE = {1=>"z1副",2=>"z3副",3=>"SNOW副",4=>"Enemy紫",5=>"z3",8=>"z1",9=>"z1"}
  #--------------------------------------------------------------------------
  # 「シンセ・ゲージ」
  #--------------------------------------------------------------------------
  SKIN = "Line"  # スキン
  X    =  16         # X 座標
  Y    =  18 # Y 座標
end
#==============================================================================
# --- CP メーターをまとめて管理するクラス、表示関係はすべてココ --- [再定義]
#==============================================================================
class CP_Meters
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    # シンセゲージの生成
    @base = Sprite.new
    @base.bitmap = RPG::Cache.windowskin(XRXS65A::SKIN).dup
    @base.x = XRXS65A::X
    @base.y = XRXS65A::Y
    @base.z = XRXS65A::X
    @width  = @base.bitmap.width
    @height = @base.bitmap.height
    @icon_set = []
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    # 生成すべきバトラーの取得
    need_initializes = []
    for battler in $game_party.actors + $game_troop.enemies
      exist = false
      for set in @icon_set
      set[0].visible = true if set[0].visible ==false
        exist |= (set[1] == battler)
      end
      need_initializes.push(battler) unless exist
    end
    for battler in need_initializes
      iconname = nil
      if battler.is_a?(Game_Actor)
        iconname = XRXS65A::ICONS[battler.id]
      else
        iconname = XRXS65A::ICONE[battler.id]
      end
      if iconname == nil
        iconname = XRXS65A::DEFAULT
      end
      sprite = Sprite.new
      sprite.bitmap = RPG::Cache.icon(iconname).dup
      sprite.y = XRXS65A::Y + @height / 2 - 12
      @icon_set.push([sprite, battler])
    end
    # 更新
    for set in @icon_set
      set[0].x = XRXS65A::X + @width * set[1].cp / set[1].max_cp - 12
      set[0].z = set[0].x
      set[0].visible = false if set[1].dead? or !set[1].exist?
    end
  end
  #--------------------------------------------------------------------------
  # ○ 可視状態
  #--------------------------------------------------------------------------
  def visible=(b)
    @base.visible = b
    @icon_set.each{|set| set[0].visible = b }
  end
  #--------------------------------------------------------------------------
  # ○ 解放
  #--------------------------------------------------------------------------
  def dispose
    @base.dispose
    @icon_set.each{|set| set[0].dispose }
  end
end[/pre]
想成为触的渣一枚Or觉得自己是渣的渣一枚。
梦石
0
星屑
1748
在线时间
485 小时
注册时间
2006-1-7
回帖
996
发表于 2014-8-14 12:24:56 | 显示全部楼层

if $game_switches[XX] = true  #如果XX号开关打开

ICON有变化

理论上就是这样
你代码能不能重新发一下
这种模式复制下来没有换行
特别费劲

点评

了解。  发表于 2014-8-14 20:26
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复

使用道具 举报

梦石
0
星屑
74
在线时间
205 小时
注册时间
2010-12-16
回帖
131
 楼主| 发表于 2014-8-14 20:28:07 | 显示全部楼层
# ▼▲▼ XRXS65A. CP制御ターンシステム「シンセ・ゲージ」 ▼▲▼ built201202
# by 桜雅 在土

#==============================================================================
# □ カスタマイズポイント
#==============================================================================
class XRXS65A
  #--------------------------------------------------------------------------
  # 「アイコン設定」
  #--------------------------------------------------------------------------
  DEFAULT = "Enemy" # ディフォルトアイコン
  # アイコンハッシュ  記述方式 : アクターID=>アイコン名
  ICONS = {
    1=>"SNOW",
    2=>"SNOW",
    3=>"SNOW",
    4=>"SNOW",
    5=>"z3",
    6=>"z1",
    }
  # アイコンハッシュE  記述方式 : エネミーID=>アイコン名
  ICONE = {1=>"z1副",2=>"z3副",3=>"SNOW副",4=>"Enemy紫",5=>"z3",8=>"z1",9=>"z1"}
  #--------------------------------------------------------------------------
  # 「シンセ・ゲージ」
  #--------------------------------------------------------------------------
  SKIN = "Line"  # スキン
  X    =  16         # X 座標
  Y    =  18 # Y 座標
end
#==============================================================================
# --- CP メーターをまとめて管理するクラス、表示関係はすべてココ --- [再定義]
#==============================================================================
class CP_Meters
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    # シンセゲージの生成
    @base = Sprite.new
    @base.bitmap = RPG::Cache.windowskin(XRXS65A::SKIN).dup
    @base.x = XRXS65A::X
    @base.y = XRXS65A::Y
    @base.z = XRXS65A::X
    @width  = @base.bitmap.width
    @height = @base.bitmap.height
    @icon_set = []
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    # 生成すべきバトラーの取得
    need_initializes = []
    for battler in $game_party.actors + $game_troop.enemies
      exist = false
      for set in @icon_set
      set[0].visible = true if set[0].visible ==false
        exist |= (set[1] == battler)
      end
      need_initializes.push(battler) unless exist
    end
    for battler in need_initializes
      iconname = nil
      if battler.is_a?(Game_Actor)
        iconname = XRXS65A::ICONS[battler.id]
      else
        iconname = XRXS65A::ICONE[battler.id]
      end
      if iconname == nil
        iconname = XRXS65A::DEFAULT
      end
      sprite = Sprite.new
      sprite.bitmap = RPG::Cache.icon(iconname).dup
      sprite.y = XRXS65A::Y + @height / 2 - 12
      @icon_set.push([sprite, battler])
    end
    # 更新
    for set in @icon_set
      set[0].x = XRXS65A::X + @width * set[1].cp / set[1].max_cp - 12
      set[0].z = set[0].x
      set[0].visible = false if set[1].dead? or !set[1].exist?
    end
  end
  #--------------------------------------------------------------------------
  # ○ 可視状態
  #--------------------------------------------------------------------------
  def visible=(b)
    @base.visible = b
    @icon_set.each{|set| set[0].visible = b }
  end
  #--------------------------------------------------------------------------
  # ○ 解放
  #--------------------------------------------------------------------------
  def dispose
    @base.dispose
    @icon_set.each{|set| set[0].dispose }
  end
end
想成为触的渣一枚Or觉得自己是渣的渣一枚。
回复

使用道具 举报

梦石
0
星屑
1748
在线时间
485 小时
注册时间
2006-1-7
回帖
996
发表于 2014-8-14 20:40:35 | 显示全部楼层
第13行 到 第22行
替换成以下
  if $game_switches[XX] = true  #如果XX号开关打开
    #以下是第一套方案
    ICONS = {
      1=>"SNOW",
      2=>"SNOW",
      3=>"SNOW",
      4=>"SNOW",
      5=>"z3",
      6=>"z1",
      }
    # アイコンハッシュE  記述方式 : エネミーID=>アイコン名
    ICONE = {1=>"z1副",2=>"z3副",3=>"SNOW副",4=>"Enemy紫",5=>"z3",8=>"z1",9=>"z1"}

  else
    #以下是第二套方案,我没改,你自己来弄素材还有重命名。
    ICONS = {
      1=>"SNOW",
      2=>"SNOW",
      3=>"SNOW",
      4=>"SNOW",
      5=>"z3",
      6=>"z1",
      }
    # アイコンハッシュE  記述方式 : エネミーID=>アイコン名
    ICONE = {1=>"z1副",2=>"z3副",3=>"SNOW副",4=>"Enemy紫",5=>"z3",8=>"z1",9=>"z1"}

   end


应该能看懂吧?
你可以先改一个,试试效果看
应该是在这里的

点评

BUG……似乎不能在这里着手。  发表于 2014-8-14 21:48
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复

使用道具 举报

梦石
0
星屑
74
在线时间
205 小时
注册时间
2010-12-16
回帖
131
 楼主| 发表于 2014-8-14 21:47:01 | 显示全部楼层
这个问题……因为是定义区所以不能使用分歧?
BUG尼嚎.jpg
想成为触的渣一枚Or觉得自己是渣的渣一枚。
回复

使用道具 举报

梦石
0
星屑
1748
在线时间
485 小时
注册时间
2006-1-7
回帖
996
发表于 2014-8-14 21:56:55 | 显示全部楼层
本帖最后由 白鬼 于 2014-8-14 21:57 编辑

这个错误提示的意思是:
【NoMethodError】
调用了未定义的方法。

undefined method‵ []=' for nil:NilClass
nil(Nil类)中没有定义这些符号的使用
比如:
nil - 0
nil * 0
nil < 0

错误不是你说的那样。你还是上工程吧

点评

这些简单的我也明白,所以一开始我就知道我肯定是找错方向了……不管怎么说谢谢你们啦~  发表于 2014-8-15 10:58
而且即使要判断的话,也应该用"=="啊,啥时候改成"="了?  发表于 2014-8-14 22:45
分歧放在这里是不可以的,因为ICONS属于常量,因此在编译的时候就要确定它的值了。但是编译的时候$game_switches没有定义,所以爆NoMethodError  发表于 2014-8-14 22:44
嗯。  发表于 2014-8-14 21:58
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复

使用道具 举报

梦石
0
星屑
74
在线时间
205 小时
注册时间
2010-12-16
回帖
131
 楼主| 发表于 2014-8-14 22:07:24 | 显示全部楼层
这一个……就三个脚本,看一下问题在什么地方。

Project1.rar

228.16 KB, 下载次数: 54

点评

效果是角色使用技能,战斗图和行走图变更(事件已解决),同时头像变更。  发表于 2014-8-15 12:32
你具体是想达到怎样的效果?角色变身,还是敌人变身?  发表于 2014-8-15 12:30
但实际上是不行的。因为刷新部分只是在战斗开始的时候进行?  发表于 2014-8-15 12:26
你在设置技能的时候,添加一个公共事件,用公共事件来打开或者关闭开关试试。因为是定义在刷新部分,所以理论上是直接就会变化的。  发表于 2014-8-15 11:49
想成为触的渣一枚Or觉得自己是渣的渣一枚。
回复

使用道具 举报

梦石
0
星屑
1748
在线时间
485 小时
注册时间
2006-1-7
回帖
996
发表于 2014-8-14 22:41:56 | 显示全部楼层
Project1.rar (237.6 KB, 下载次数: 76)

弄好了。
我要纠正一下我的错误
开关判断应该是 ==  ,而不是  =
也就是说,应该是:
if $game_switches[XX] == true

我在下面用到ICONS的位置上进行了判断,原理是一样的。

在定义部分,追加了ICONS2和ICOE2的定义

你可以搜索  白鬼  
来看我修改了哪里
建议对照你原来的脚本,这样才能学到。

点评

嗯……请问有没有可能战斗中即时更换呢?就是说战斗的时候使用技能打开开关,然后马上刷新图像。  发表于 2014-8-15 11:38

评分

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

查看全部评分

初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部