Project1

标题: 如何让开关控制CP制御AX追加的显示头像 [打印本页]

作者: 550806810    时间: 2014-8-13 22:09
标题: 如何让开关控制CP制御AX追加的显示头像
我想要这个代码能够实现“当某个开关开启时改变某一个人物的ICONS”,并且是在战斗中能够即时改变。请问可以做到吗?
如果事件可以做到的话,也请告诉我——!


RUBY 代码复制
  1. # ▼▲▼ XRXS65A. CP制御ターンシステム「シンセ・ゲージ」 ▼▲▼ built201202
  2. # by 桜雅 在土
  3.  
  4. #==============================================================================
  5. # □ カスタマイズポイント
  6. #==============================================================================
  7. class XRXS65A
  8.   #--------------------------------------------------------------------------
  9.   # 「アイコン設定」
  10.   #--------------------------------------------------------------------------
  11.   DEFAULT = "Enemy" # ディフォルトアイコン
  12.   # アイコンハッシュ  記述方式 : アクターID=>アイコン名
  13.   ICONS = {
  14.     1=>"SNOW",
  15.     2=>"SNOW",
  16.     3=>"SNOW",
  17.     4=>"SNOW",
  18.     5=>"z3",
  19.     6=>"z1",
  20.     }
  21.   # アイコンハッシュE  記述方式 : エネミーID=>アイコン名
  22.   ICONE = {1=>"z1副",2=>"z3副",3=>"SNOW副",4=>"Enemy紫",5=>"z3",8=>"z1",9=>"z1"}
  23.   #--------------------------------------------------------------------------
  24.   # 「シンセ・ゲージ」
  25.   #--------------------------------------------------------------------------
  26.   SKIN = "Line"  # スキン
  27.   X    =  16         # X 座標
  28.   Y    =  18 # Y 座標
  29. end
  30. #==============================================================================
  31. # --- CP メーターをまとめて管理するクラス、表示関係はすべてココ --- [再定義]
  32. #==============================================================================
  33. class CP_Meters
  34.   #--------------------------------------------------------------------------
  35.   # ○ オブジェクト初期化
  36.   #--------------------------------------------------------------------------
  37.   def initialize
  38.     # シンセゲージの生成
  39.     @base = Sprite.new
  40.     @base.bitmap = RPG::Cache.windowskin(XRXS65A::SKIN).dup
  41.     @base.x = XRXS65A::X
  42.     @base.y = XRXS65A::Y
  43.     @base.z = XRXS65A::X
  44.     @width  = @base.bitmap.width
  45.     [url=home.php?mod=space&uid=291977]@height[/url] = @base.bitmap.height
  46.     @icon_set = []
  47.     refresh
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ○ リフレッシュ
  51.   #--------------------------------------------------------------------------
  52.   def refresh
  53.     # 生成すべきバトラーの取得
  54.     need_initializes = []
  55.     for battler in $game_party.actors + $game_troop.enemies
  56.       exist = false
  57.       for set in @icon_set
  58.       set[0].visible = true if set[0].visible ==false
  59.         exist |= (set[1] == battler)
  60.       end
  61.       need_initializes.push(battler) unless exist
  62.     end
  63.     for battler in need_initializes
  64.       iconname = nil
  65.       if battler.is_a?(Game_Actor)
  66.         iconname = XRXS65A::ICONS[battler.id]
  67.       else
  68.         iconname = XRXS65A::ICONE[battler.id]
  69.       end
  70.       if iconname == nil
  71.         iconname = XRXS65A::DEFAULT
  72.       end
  73.       sprite = Sprite.new
  74.       sprite.bitmap = RPG::Cache.icon(iconname).dup
  75.       sprite.y = XRXS65A::Y + @height / 2 - 12
  76.       @icon_set.push([sprite, battler])
  77.     end
  78.     # 更新
  79.     for set in @icon_set
  80.       set[0].x = XRXS65A::X + @width * set[1].cp / set[1].max_cp - 12
  81.       set[0].z = set[0].x
  82.       set[0].visible = false if set[1].dead? or !set[1].exist?
  83.     end
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ○ 可視状態
  87.   #--------------------------------------------------------------------------
  88.   def visible=(b)
  89.     @base.visible = b
  90.     @icon_set.each{|set| set[0].visible = b }
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ○ 解放
  94.   #--------------------------------------------------------------------------
  95.   def dispose
  96.     @base.dispose
  97.     @icon_set.each{|set| set[0].dispose }
  98.   end
  99. end

作者: 白鬼    时间: 2014-8-14 12:24

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

ICON有变化

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

作者: 550806810    时间: 2014-8-14 20:28
# ▼▲▼ 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
作者: 白鬼    时间: 2014-8-14 20:40
第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


应该能看懂吧?
你可以先改一个,试试效果看
应该是在这里的
作者: 550806810    时间: 2014-8-14 21:47
这个问题……因为是定义区所以不能使用分歧?

BUG尼嚎.jpg (15.85 KB, 下载次数: 2)

BUG尼嚎.jpg

作者: 白鬼    时间: 2014-8-14 21:56
本帖最后由 白鬼 于 2014-8-14 21:57 编辑

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

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

错误不是你说的那样。你还是上工程吧
作者: 550806810    时间: 2014-8-14 22:07
这一个……就三个脚本,看一下问题在什么地方。

Project1.rar

228.16 KB, 下载次数: 54


作者: 白鬼    时间: 2014-8-14 22:41
Project1.rar (237.6 KB, 下载次数: 76)

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

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

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

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




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