查看: 3037|回复: 10

[已经解决] 数组怎么递进,怎么和系统变量运算

[复制链接]
梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-12-11
回帖
5
发表于 2015-12-11 22:10:48 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 RyanBern 于 2015-12-27 09:51 编辑

我要建个数组,数组中每个单元,依次和系统变量进行运算,结果判定是否进入下个循环。现在循环停不上来。对不起,新人还是不能理解。我想要的是,数组与变量11的差值,要显示出来的,另外,差值小于等于0时,lv+1
这样的效果,大神门例子写完后,用菜单test1测试一下结果。谢谢。

请教育各位大神帮忙看看。{:2_280:}
[pre lang="ruby"]
#==============================================================================
# ■ Window_Check
#------------------------------------------------------------------------------
#  显示评分画面窗口。
#==============================================================================

class Window_Check < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor : 角色
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 0, 620, 480)
    self.contents = Bitmap.new(width - 18, height - 18)
    @actor = actor
    self.contents.font.size = 20
    $v = 0
    refresh

  end
  

  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear  
   
     #——定义

     $lastexp = [10,20,30,40,50,60,70,80,90,100]

     $lvexp = $lastexp[$v].to_i - $game_variables[11]
     if $lvexp <= 0
       $game_variables[15]+=1
      $v+=1
     end  
   
    #——lv
    self.contents.font.color = system_color
    self.contents.draw_text(120, 50, 128, 28, "lv")
    self.contents.font.color = normal_color
    self.contents.draw_text(200, 50, 80, 28, $game_variables[15] .to_s, 2)
   
     #——lvexp
    self.contents.font.color = system_color
    self.contents.draw_text(120, 85, 128, 28, "lvexp")
    self.contents.font.color = normal_color
   
    self.contents.draw_text(200, 85, 70, 28, $lvexp .to_s,2)
   
     #——描绘lastexp   
    self.contents.font.color = system_color
    self.contents.draw_text(120, 15, 128, 28,"nowexp")
    self.contents.font.color = normal_color
    self.contents.draw_text(190, 15, 100, 28, $game_variables[11] .to_s, 2)

   
    #——挑战关卡次数
    def totalcs
    @totalcs = $game_variables[255]+$game_variables[265]+$game_variables[285]
    end
    self.contents.font.color = system_color
    self.contents.draw_text(330,15,128,28,"挑战关卡次数")
    self.contents.font.color = normal_color
    self.contents.draw_text(380,15,120,28, totalcs.to_s, 2)
    self.contents.draw_text(520,15,100,28, "次")
   
    #——成功关卡次数
    def totalvs
    @totalvs = $game_variables[256]+$game_variables[266]+$game_variables[286]
    end
    self.contents.font.color = system_color
    self.contents.draw_text(330,50,128,28,"成功关卡次数")
    self.contents.font.color = normal_color
    self.contents.draw_text(380,50,120,28, totalvs.to_s, 2)
    self.contents.draw_text(520,50,100,28, "次")
   

   
   
  end #def refresh
end   #class
[/pre]

test01.rar

343.4 KB, 下载次数: 2

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2015-12-11 22:29:04 | 显示全部楼层
本帖最后由 cinderelmini 于 2015-12-11 22:32 编辑
  1. #==============================================================================
  2. # ■ Window_Check
  3. #------------------------------------------------------------------------------
  4. #  显示评分画面窗口。
  5. #==============================================================================

  6. class Window_Check < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     actor : 角色
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor)
  12.     super(0, 0, 620, 480)
  13.     self.contents = Bitmap.new(width - 18, height - 18)
  14.     @actor = actor
  15.     self.contents.font.size = 20
  16.     $lastexp = [10,20,30,40,50,60,70,80,90,100]
  17.     $lvexp = 0
  18.     refresh

  19.   end
  20.   

  21.   #--------------------------------------------------------------------------
  22.   # ● 刷新
  23.   #--------------------------------------------------------------------------
  24.   def refresh
  25.     self.contents.clear  
  26.    
  27.      #——定义

  28.      for lexp in $lastexp.dup
  29.        if lexp > $game_variables[11]
  30.          break
  31.        else
  32.          $lvexp = lexp - $game_variables[11]
  33.          $game_variables[15]+=1
  34.        end  
  35.      end  
  36.    
  37.     #——lv
  38.     self.contents.font.color = system_color
  39.     self.contents.draw_text(120, 50, 128, 28, "lv")
  40.     self.contents.font.color = normal_color
  41.     self.contents.draw_text(200, 50, 80, 28, $game_variables[15] .to_s, 2)
  42.    
  43.      #——lvexp
  44.     self.contents.font.color = system_color
  45.     self.contents.draw_text(120, 85, 128, 28, "lvexp")
  46.     self.contents.font.color = normal_color
  47.    
  48.     self.contents.draw_text(200, 85, 70, 28, $lvexp .to_s,2)
  49.    
  50.      #——描绘lastexp   
  51.     self.contents.font.color = system_color
  52.     self.contents.draw_text(120, 15, 128, 28,"nowexp")
  53.     self.contents.font.color = normal_color
  54.     self.contents.draw_text(190, 15, 100, 28, $game_variables[11] .to_s, 2)

  55.    
  56.     #——挑战关卡次数
  57.     totalcs = $game_variables[255]+$game_variables[265]+$game_variables[285]
  58.     self.contents.font.color = system_color
  59.     self.contents.draw_text(330,15,128,28,"挑战关卡次数")
  60.     self.contents.font.color = normal_color
  61.     self.contents.draw_text(380,15,120,28, totalcs.to_s, 2)
  62.     self.contents.draw_text(520,15,100,28, "次")
  63.    
  64.     #——成功关卡次数
  65.     totalvs = $game_variables[256]+$game_variables[266]+$game_variables[286]
  66.     self.contents.font.color = system_color
  67.     self.contents.draw_text(330,50,128,28,"成功关卡次数")
  68.     self.contents.font.color = normal_color
  69.     self.contents.draw_text(380,50,120,28, totalvs.to_s, 2)
  70.     self.contents.draw_text(520,50,100,28, "次")
  71.    

  72.    
  73.    
  74.   end #def refresh
  75. end   #class
复制代码
这样?

评分

参与人数 1星屑 +150 收起 理由
myownroc + 150 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-12-11
回帖
5
 楼主| 发表于 2015-12-12 09:42:17 | 显示全部楼层
cinderelmini 发表于 2015-12-11 22:29
这样?

不行,测试test1时,变量11刷新变化后,刷新1新,等级就升一次,另外,数组的值还是第一个位置。
回复

使用道具 举报

梦石
0
星屑
451
在线时间
228 小时
注册时间
2015-2-23
回帖
233
发表于 2015-12-12 14:38:58 | 显示全部楼层
本帖最后由 枫の叶 于 2015-12-12 18:04 编辑

不知道是不是我理解错误,
楼主是不是先定义一个经验的数组,然后根据变量11号的值来判断等级,那么可以这样
  1. $lastexp = [10,20,30,40,50,60,70,80,90,100]
  2. now_lv = 1
  3. unless $game_variables[11] == 0
  4.   $lastexp.each do |i|
  5.     if (i / $game_variables[11]) == 1
  6.       now_lv = $lastexp.index(i) + 2
  7.       break
  8.     end
  9.   end
  10. end
  11. return now_lv
复制代码
now_lv 就是等级。
制作XP特效,找我。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-12-11
回帖
5
 楼主| 发表于 2015-12-13 09:54:35 | 显示全部楼层
枫の叶 发表于 2015-12-12 14:38
不知道是不是我理解错误,
楼主是不是先定义一个经验的数组,然后根据变量11号的值来判断等级,那么可以这 ...

数组中值是下级经验,变量11的变化,来升级,等级变化后,数组进入下个值。
回复

使用道具 举报

梦石
0
星屑
451
在线时间
228 小时
注册时间
2015-2-23
回帖
233
发表于 2015-12-13 17:54:58 | 显示全部楼层
本帖最后由 枫の叶 于 2015-12-13 17:57 编辑

数组中的值每个单元对应一级的经验,只是一个模板,不用依照当前经验让它进入下一个值,
只需要用当前经验依次与它的每个单元比对就行了。
可以把下面的方法放入你的那个窗口里,获取的等级就是 lv_count 。


[pre lang="ruby"]def lv_count
  lastexp = [10,20,30,40,50,60,70,80,90,100]
  now_lv = 1
  lastexp.each do |i|
    if $game_variables[11] >= i
      now_lv = lastexp.index(i) + 2
      break
    end
  end
  return now_lv
end[/pre]
制作XP特效,找我。
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2015-12-13 21:35:32 | 显示全部楼层
接楼上,另一种写法:
[pre lang="Ruby"]def lv_count
  lastexp = [10,20,30,40,50,60,70,80,90,100]
  lvl = lastexp.index{|x| x > $game_variables[11]}
  lvl.nil? ? lastexp.size + 1 : lvl + 1
end[/pre]

评分

参与人数 1星屑 +150 收起 理由
myownroc + 150 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-12-11
回帖
5
 楼主| 发表于 2015-12-14 10:09:10 来自手机 | 显示全部楼层
RyanBern 发表于 2015-12-13 21:35
接楼上,另一种写法:
def lv_count
  lastexp = [10,20,30,40,50,60,70,80,90,100]

对不起,新人还是不能理解。我想要的是,数组与变量11的差值,要显示出来的,另外,差值小于等于0时,lv+1
这样的效果,大神门例子写完后,用菜单test1测试一下结果。谢谢。

点评

还是木有搞懂。可以说大概效果,不要只说一点细节。或许有其他方法。  发表于 2015-12-14 18:18
回复

使用道具 举报

梦石
0
星屑
50
在线时间
3 小时
注册时间
2015-12-11
回帖
5
 楼主| 发表于 2015-12-14 20:36:46 | 显示全部楼层
小虾米上学 发表于 2015-12-14 10:09
对不起,新人还是不能理解。我想要的是,数组与变量11的差值,要显示出来的,另外,差值小于等于0时,lv+ ...

我想要的效果是:类似声望等级效果,需要人物达到一定声望,才能提升声望等级,才能开通一些地图FB,希望通过做任务得到声望值(V11变量),希望建立声望经验的判定数组的。还能看出差多少经验,声望升级。
回复

使用道具 举报

梦石
0
星屑
451
在线时间
228 小时
注册时间
2015-2-23
回帖
233
发表于 2015-12-14 22:03:35 | 显示全部楼层
[pre lang="ruby"]module Fy
Prestige_mod = [10,20,30,40,50,60,70,80,90,100] #声望经验的升级标准。
Prestige_exp_vi = 11                            #记录声望经验的变量ID。
Prestige_lv_vi  = 15                            #记录声望等级的变量ID。
Prestige_next_lv = 16                       #记录下一等级所需经验的变量ID。
end
class Game_Variables
  def []=(variable_id, value)
    if variable_id <= 5000
      @data[variable_id] = value
      ################################################################
      if variable_id == Fy::Prestige_exp_vi
        @data[Fy::Prestige_lv_vi] = 0
        @data[Fy::Prestige_next_lv] = Fy::Prestige_mod[0]
        return if @data[variable_id] == 0
        Fy::Prestige_mod.each do |i|
          if ((i-1) / @data[variable_id]) == 1
            @data[Fy::Prestige_lv_vi] = Fy::Prestige_mod.index(i)
            @data[Fy::Prestige_next_lv] = Fy::Prestige_mod[@data[Fy::Prestige_lv_vi]]
            break
          end
        end
        ore = Fy::Prestige_mod.clone
        if @data[variable_id] >= ore.pop
          @data[Fy::Prestige_lv_vi] = Fy::Prestige_mod.size
          @data[Fy::Prestige_next_lv] = 10000
        end
      end
      ##################################################################
    end
  end
end[/pre]

这个全部用变量储存声望的一些数据。改变声望经验的变量数值,其它两个变量<声望等级和下一级经验>会自动对应的跟着改变,
在描绘时就只需要描绘几个变量就行了。
声望等级初始值是0级,如果声望经验大于或等于经验模板最后那个数,就不再升级,显示的下一级经验是10000。

评分

参与人数 1梦石 +1 收起 理由
myownroc + 1 认可答案

查看全部评分

制作XP特效,找我。
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部