Project1

标题: 角色获取 [打印本页]

作者: 伊莉蕥    时间: 2010-11-17 13:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-11-17 14:29
  1. $data_actors.each do |actor|
  2.    p actor.name if actor
  3. end
复制代码

作者: 伊莉蕥    时间: 2010-11-17 15:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: summer92    时间: 2010-11-17 15:50
$game_actors[0].name 对了欢迎认可答案,这是主角名字


作者: summer92    时间: 2010-11-17 16:10
本帖最后由 summer92 于 2010-11-17 16:11 编辑
  1. for i in $game_actors.siize
  2. p $game_actors[i].name
  3. end
复制代码
这回可以了把
作者: 迷路子    时间: 2010-11-17 16:11
你要在哪里读取?
是在按下"新游戏"後还是title画面?
如果是在游戏进入後
应该可以用
  1. for actor in $data_actors
  2.   p actor.name
  3. end
复制代码

作者: 伊莉蕥    时间: 2010-11-17 16:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: summer92    时间: 2010-11-17 16:19
本帖最后由 summer92 于 2010-11-17 18:08 编辑

再发一帖把,不对我就闪了

  1. 悲剧
复制代码

作者: 八云紫    时间: 2010-11-17 16:28
def draw_item(index)
   name = ""
   $data_actors.each do |actor|
     name = actor.name if actor
   end
   rect = item_rect(index)
   self.contents.clear_rect(rect)
   self.contents.draw_text(rect, name)
end

当然只是最后一个了. 应该是
  1. def draw_item(index)
  2.    $data_actors.each do |actor|
  3.      name = actor.name if actor
  4.     rect = item_rect(index)
  5.    self.contents.clear_rect(rect)
  6.    self.contents.draw_text(rect, name)
  7.    end
  8.    
  9. end
复制代码

作者: 八云紫    时间: 2010-11-17 16:58
  1. #===============================================
  2. #Window_Prolist
  3. #-----------------------------------------------
  4. #显示人物列表的窗口
  5. #===============================================
  6. class Window_Item < Window_Selectable
  7.   #对象初始化
  8.   def initialize(x, y, width, height)
  9.     super(0, WLH + 32, 240, 416 - (WLH  + 32))
  10.     refresh
  11.   #  self.active = true
  12.     @item_max = $data_actors.size
  13.     self.index = 0
  14.   end
  15.   
  16.   #刷新
  17.   def refresh
  18.     self.contents.clear
  19.    # name = ""
  20.    
  21.       #name = actor.name
  22.     #  $data_actors.each do |actor|
  23.     #   name = actor.name if actor
  24.    #  end
  25.     # rect = item_rect(index)
  26.    # self.contents.clear_rect(rect)
  27.    #  self.contents.draw_text(rect, name)
  28.    # end
  29.    for i in 0..@item_max
  30.      draw_item(i)
  31.    end
  32. end

  33. def draw_item(index)
  34.    name = $data_actors[index + 1].name
  35.    rect = item_rect(index)
  36.    self.contents.clear_rect(rect)
  37.    self.contents.draw_text(rect, name)
  38. end

  39.   #更新光标
  40.   def update_cursor
  41.     if @index < 0               # 无光标
  42.       self.cursor_rect.empty
  43.     elsif @index < @item_max
  44.       self.cursor_rect.set(0, @index * 24, contents.width, 24)
  45.     elsif @index >= 100         # 使用本身
  46.       self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
  47.       end
  48.   end
  49. end
复制代码
稍微帮你修改了下,.
作者: 八云紫    时间: 2010-11-17 18:01
好吧, 继续连贴~
  1. #===============================================
  2. #Window_Prolist
  3. #-----------------------------------------------
  4. #显示人物列表的窗口
  5. #===============================================
  6. class Window_Item < Window_Selectable
  7.   #对象初始化
  8.   def initialize(x, y, width, height)
  9.     super(0, WLH + 32, 240, 416 - (WLH  + 32))
  10.    
  11.   #  self.active = true
  12.     @item_max = $data_actors.size - 1
  13.     refresh
  14.     self.index = 0
  15.   end
  16.   
  17.   #刷新
  18.   def refresh
  19.     self.contents.clear
  20.    # name = ""
  21.    
  22.       #name = actor.name
  23.     #  $data_actors.each do |actor|
  24.     #   name = actor.name if actor
  25.    #  end
  26.     # rect = item_rect(index)
  27.    # self.contents.clear_rect(rect)
  28.    #  self.contents.draw_text(rect, name)
  29.    # end
  30.    for i in 0...@item_max
  31.      draw_item(i)
  32.    end
  33. end

  34. def draw_item(index)
  35.    name = $data_actors[index + 1].name
  36.    rect = item_rect(index)
  37.    # self.contents.clear_rect(rect)
  38.    self.contents.draw_text(rect, name)
  39. end

  40.   #更新光标
  41.   def update_cursor
  42.     if @index < 0               # 无光标
  43.       self.cursor_rect.empty
  44.     elsif @index < @item_max
  45.       self.cursor_rect.set(0, @index * 24, contents.width, 24)
  46.     elsif @index >= 100         # 使用本身
  47.       self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
  48.       end
  49.   end
  50. end
复制代码

作者: 伊莉蕥    时间: 2010-11-17 18:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-11-17 18:36
我倒是测试可用~~~
作者: 八云紫    时间: 2010-11-17 19:58
你先确定下 refresh 这个方法的调用位置~~~
作者: 伊莉蕥    时间: 2010-11-17 20:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: lwdx0822    时间: 2010-11-17 22:31
坐观最后结果·~~~直接拉来用·~~~
嘿嘿·~~~别PIA我·~~
作者: 伊莉蕥    时间: 2010-11-17 22:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: DeathKing    时间: 2010-11-17 22:51
本帖最后由 DeathKing 于 2010-11-17 22:52 编辑

回复 伊莉蕥 的帖子

  1. $data_actors.each do |e|
  2. end
复制代码
迭代的是$data_actors中的每个Actors对象,在迭代的内部,应该使用e.name获取每个对象的名字。

[line]1[/line]
  1. [1,2,3].each do |item|
  2.   p item
  3. end

  4. # 输出大概是这样
  5. # 1
  6. # 2
  7. # 3
复制代码
[line]1[/line]
我迷信ri
  1. C:\Documents and Settings\DeathKing>ri Array#each
  2. ------------------------------------------------------------- Array#each
  3.      array.each {|item| block }   ->   array

  4.      From Ruby 1.9.1
  5. ------------------------------------------------------------------------
  6.      Calls _block_ once for each element in _self_, passing that element
  7.      as a parameter.

  8.         a = [ "a", "b", "c" ]
  9.         a.each {|x| print x, " -- " }

  10.      produces:

  11.         a -- b -- c --
复制代码

作者: summer92    时间: 2010-11-18 11:30
300经验值,LZ 把工程发给我,包完成,LZ 基础知识还要加强的说
作者: 伊莉蕥    时间: 2010-11-18 12:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-11-18 13:25
角色.rar (239.25 KB, 下载次数: 26)

修改了两处. 而且都是我之前的脚本修改过来的. 说明 LZ 没好好看我的脚本的说, 太伤心了~~~{:nm_2:}
作者: 伊莉蕥    时间: 2010-11-18 14:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-11-18 14:22
... 和 .. 是差很多的说~~~
作者: summer92    时间: 2010-11-18 16:02
慢了一步,解决了把?LZ

作者: DeathKing    时间: 2010-11-18 22:27
本帖最后由 DeathKing 于 2010-11-18 22:28 编辑

回复 伊莉蕥 的帖子

$data_actors.id.each = =b
你的$data_actors.id获取的是一个id(Fixnum,整数类对象,没有提供each方法是当然的)
你完全没弄明白for关键字和each方法的区别啊。

我明白你的意思,你是想通过id获取对象:
for id in 1..$data_actors.size
  actor = $data_actors[id]
end
而Array#each方法则是迭代数组中的每个元素。
$data_actors.each do |actor|
  # 这里每次迭代的actor就等于上面actor = $data_actors[id]
end

建议就是没有弄明白each的原理之前就用for关键字。




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