Project1

标题: 新手菜单第四章的“半身像”错在最后一步,求助。 [打印本页]

作者: 眼中目之瞳    时间: 2015-9-23 21:14
标题: 新手菜单第四章的“半身像”错在最后一步,求助。


之前的帖子犯了理解错误,现在的问题是,在半身像教程前面的步骤都有戏没有影响,但唯独到了最后一步会报错,不太理解“def draw_item(index)部分”指的仅仅是“def draw_item(index)”这一小段,还是指什么……
作者: cinderelmini    时间: 2015-9-23 21:24
截图不完整但看起来像是括弧没对好……
检查脚本上下文是否有多余或者没配对的括弧?
作者: 眼中目之瞳    时间: 2015-9-23 21:34
cinderelmini 发表于 2015-9-23 21:24
截图不完整但看起来像是括弧没对好……
检查脚本上下文是否有多余或者没配对的括弧? ...

这个是又改回去了,直接用“draw_actor_HalfBody(actor, rect.x, rect.y, enabled)“替换”draw_item(index)“的话就会出错
作者: 眼中目之瞳    时间: 2015-9-23 21:37
cinderelmini 发表于 2015-9-23 21:24
截图不完整但看起来像是括弧没对好……
检查脚本上下文是否有多余或者没配对的括弧? ...

只有一句话不知道该怎么改……
作者: taroxd    时间: 2015-9-23 21:40
本帖最后由 taroxd 于 2015-9-23 21:42 编辑
眼中目之瞳 发表于 2015-9-23 21:37
只有一句话不知道该怎么改……


指的应该是修改方法体吧

RUBY 代码复制
  1. def show
  2.   # 方法体从这里开始
  3.   puts "hello world"
  4.   # 到这里结束
  5. end

作者: 眼中目之瞳    时间: 2015-9-23 21:45
taroxd 发表于 2015-9-23 21:40
指的应该是修改方法体吧

def show

嗯,所以具体是怎么改……
作者: 眼中目之瞳    时间: 2015-9-23 21:52
本帖最后由 眼中目之瞳 于 2015-9-23 22:00 编辑
taroxd 发表于 2015-9-23 21:40
指的应该是修改方法体吧

def show


RUBY 代码复制
  1. def show
  2.   # 方法体从这里开始
  3.   puts "draw_actor_HalfBody(actor, rect.x, rect.y, enabled)"
  4.   # 到这里结束
  5. end


这样一弄头像和血量都消失了,【修改————】



不知道半身像怎么排列,跟头像图片同一名字一种排列方法还空白……
作者: 眼中目之瞳    时间: 2015-9-23 22:09
taroxd 发表于 2015-9-23 21:40
指的应该是修改方法体吧

def show

而且面向新人的话,如果要加额外的代码原LZ也应该会贴出来才对……
作者: cinderelmini    时间: 2015-9-23 23:59
眼中目之瞳 发表于 2015-9-23 21:37
只有一句话不知道该怎么改……

所以把你出错的那篇代码发出来可行?
作者: 眼中目之瞳    时间: 2015-9-24 05:20
cinderelmini 发表于 2015-9-23 23:59
所以把你出错的那篇代码发出来可行?

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_MenuStatus
  4. #------------------------------------------------------------------------------
  5. #  菜单画面中,显示队伍成员状态的窗口
  6. #==============================================================================
  7.  
  8. class Window_MenuStatus < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_reader   :pending_index            # 保留位置(整队用)
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化对象
  15.   #--------------------------------------------------------------------------
  16.   def initialize(x, y)
  17.     super(x, y, window_width, window_height)
  18.     @pending_index = -1
  19.     refresh
  20.   end
  21. #--------------------------------------------------------------------------
  22.   # ● 获取窗口的宽度
  23.   #--------------------------------------------------------------------------
  24.   def window_width
  25.     Graphics.width
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 获取窗口的高度
  29.   #--------------------------------------------------------------------------
  30.   def window_height
  31.     Graphics.height - 96
  32.   end
  33. #--------------------------------------------------------------------------
  34.   # ● 获取项目数
  35.   #--------------------------------------------------------------------------
  36.   def item_max
  37.     $game_party.members.size
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 获取项目的高度
  41.   #--------------------------------------------------------------------------
  42.   def item_height
  43.     height - standard_padding * 2
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 获取项目的宽度
  47.   #--------------------------------------------------------------------------
  48.   def item_width
  49.     (width - standard_padding * 2 + spacing) /col_max - spacing
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 获取行间距的宽度
  53.   #--------------------------------------------------------------------------
  54.   def spacing
  55.     return 0
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 绘制项目
  59.   #--------------------------------------------------------------------------
  60.    def show
  61.   # 方法体从这里开始
  62.   puts "draw_actor_HalfBody(actor, rect.x, rect.y, enabled)"
  63.   # 到这里结束
  64. end
  65.  
  66.   #--------------------------------------------------------------------------
  67.   # ● 绘制项目的背景
  68.   #--------------------------------------------------------------------------
  69.   def draw_item_background(index)
  70.     if index == @pending_index
  71.       contents.fill_rect(item_rect(index), pending_color)
  72.     end
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 按下确定键时的处理
  76.   #--------------------------------------------------------------------------
  77.   def process_ok
  78.     super
  79.     $game_party.menu_actor = $game_party.members[index]
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 返回上一个选择的位置
  83.   #--------------------------------------------------------------------------
  84.   def select_last
  85.     select($game_party.menu_actor.index || 0)
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 设置保留位置(整队用)
  89.   #--------------------------------------------------------------------------
  90.   def pending_index=(index)
  91.     last_pending_index = @pending_index
  92.     @pending_index = index
  93.     redraw_item(@pending_index)
  94.     redraw_item(last_pending_index)
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 获取列数
  98.   #--------------------------------------------------------------------------
  99.   def col_max
  100.     return 4 #跟据分辨率的不同可以改
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 获取首列位置
  104.   #--------------------------------------------------------------------------
  105.   def top_col
  106.     ox / (item_width + spacing)
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 设置首列位置
  110.   #--------------------------------------------------------------------------
  111.   def top_col=(col)
  112.     col = 0 if col < 0
  113.     #col = col_max - 1 if col > col_max
  114.     self.ox = col * (item_width + spacing)
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 获取尾列位置
  118.   #--------------------------------------------------------------------------
  119.   def bottom_col
  120.     top_col + col_max - 1
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 设置尾列位置
  124.   #--------------------------------------------------------------------------
  125.   def bottom_col=(col)
  126.     self.top_col = col - (col_max - 1)
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 确保光标在画面范围内滚动
  130.   #--------------------------------------------------------------------------
  131.   def ensure_cursor_visible
  132.     self.top_col = index if index < top_col
  133.     self.bottom_col = index if index > bottom_col
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 获取项目的绘制矩形
  137.   #--------------------------------------------------------------------------
  138.   def item_rect(index)
  139.     rect = super
  140.     rect.x = index * (item_width + spacing)
  141.     rect.y = 0
  142.     rect
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 获取对齐方向
  146.   #--------------------------------------------------------------------------
  147.   def alignment
  148.     return 1
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ● 光标向下移动
  152.   #--------------------------------------------------------------------------
  153.   def cursor_down(wrap = false)
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 光标向上移动
  157.   #--------------------------------------------------------------------------
  158.   def cursor_up(wrap = false)
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 光标移至下一页
  162.   #--------------------------------------------------------------------------
  163.   def cursor_pagedown
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 光标移至上一页
  167.   #--------------------------------------------------------------------------
  168.   def cursor_pageup
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● 计算窗口内容的宽度
  172.   #--------------------------------------------------------------------------
  173.   def contents_width
  174.     (item_width + spacing) * item_max - spacing
  175.   end
  176.     #--------------------------------------------------------------------------
  177.   # ● 计算窗口内容的宽度
  178.   #--------------------------------------------------------------------------
  179.   def contents_height
  180.     item_height
  181.   end
  182. end


这个是已经按“taroxd”的建议改完的,不会报错但不显示头像和数值。
作者: 眼中目之瞳    时间: 2015-9-24 05:24
cinderelmini 发表于 2015-9-23 23:59
所以把你出错的那篇代码发出来可行?

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_MenuStatus
  4. #------------------------------------------------------------------------------
  5. #  菜单画面中,显示队伍成员状态的窗口
  6. #==============================================================================
  7.  
  8. class Window_MenuStatus < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_reader   :pending_index            # 保留位置(整队用)
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化对象
  15.   #--------------------------------------------------------------------------
  16.   def initialize(x, y)
  17.     super(x, y, window_width, window_height)
  18.     @pending_index = -1
  19.     refresh
  20.   end
  21. #--------------------------------------------------------------------------
  22.   # ● 获取窗口的宽度
  23.   #--------------------------------------------------------------------------
  24.   def window_width
  25.     Graphics.width
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 获取窗口的高度
  29.   #--------------------------------------------------------------------------
  30.   def window_height
  31.     Graphics.height - 96
  32.   end
  33. #--------------------------------------------------------------------------
  34.   # ● 获取项目数
  35.   #--------------------------------------------------------------------------
  36.   def item_max
  37.     $game_party.members.size
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 获取项目的高度
  41.   #--------------------------------------------------------------------------
  42.   def item_height
  43.     height - standard_padding * 2
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 获取项目的宽度
  47.   #--------------------------------------------------------------------------
  48.   def item_width
  49.     (width - standard_padding * 2 + spacing) /col_max - spacing
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 获取行间距的宽度
  53.   #--------------------------------------------------------------------------
  54.   def spacing
  55.     return 0
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 绘制项目
  59.   #--------------------------------------------------------------------------
  60.     def draw_actor_HalfBody(actor, rect.x, rect.y, enabled)
  61.     actor = $game_party.members[index]
  62.     enabled = $game_party.battle_members.include?(actor)
  63.     rect = item_rect(index)
  64.     draw_item_background(index)
  65.     draw_actor_face(actor, rect.x, rect.y, enabled)
  66.     draw_actor_name(actor,rect.x, rect.y+96)
  67.     draw_actor_class(actor,rect.x, rect.y+96+line_height*1)
  68.     draw_actor_icons(actor,rect.x,rect.y+96+line_height*2)
  69.     draw_actor_level(actor,rect.x, rect.y+96+line_height*2)
  70.     draw_actor_hp(actor,rect.x, rect.y+96+line_height*3)
  71.     draw_actor_mp(actor,rect.x,rect.y+96+line_height*5)
  72.     draw_actor_tp(actor,rect.x,rect.y+96+line_height*6)
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 绘制项目的背景
  76.   #--------------------------------------------------------------------------
  77.   def draw_item_background(index)
  78.     if index == @pending_index
  79.       contents.fill_rect(item_rect(index), pending_color)
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 按下确定键时的处理
  84.   #--------------------------------------------------------------------------
  85.   def process_ok
  86.     super
  87.     $game_party.menu_actor = $game_party.members[index]
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 返回上一个选择的位置
  91.   #--------------------------------------------------------------------------
  92.   def select_last
  93.     select($game_party.menu_actor.index || 0)
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 设置保留位置(整队用)
  97.   #--------------------------------------------------------------------------
  98.   def pending_index=(index)
  99.     last_pending_index = @pending_index
  100.     @pending_index = index
  101.     redraw_item(@pending_index)
  102.     redraw_item(last_pending_index)
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 获取列数
  106.   #--------------------------------------------------------------------------
  107.   def col_max
  108.     return 4 #跟据分辨率的不同可以改
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 获取首列位置
  112.   #--------------------------------------------------------------------------
  113.   def top_col
  114.     ox / (item_width + spacing)
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 设置首列位置
  118.   #--------------------------------------------------------------------------
  119.   def top_col=(col)
  120.     col = 0 if col < 0
  121.     #col = col_max - 1 if col > col_max
  122.     self.ox = col * (item_width + spacing)
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 获取尾列位置
  126.   #--------------------------------------------------------------------------
  127.   def bottom_col
  128.     top_col + col_max - 1
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 设置尾列位置
  132.   #--------------------------------------------------------------------------
  133.   def bottom_col=(col)
  134.     self.top_col = col - (col_max - 1)
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 确保光标在画面范围内滚动
  138.   #--------------------------------------------------------------------------
  139.   def ensure_cursor_visible
  140.     self.top_col = index if index < top_col
  141.     self.bottom_col = index if index > bottom_col
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 获取项目的绘制矩形
  145.   #--------------------------------------------------------------------------
  146.   def item_rect(index)
  147.     rect = super
  148.     rect.x = index * (item_width + spacing)
  149.     rect.y = 0
  150.     rect
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 获取对齐方向
  154.   #--------------------------------------------------------------------------
  155.   def alignment
  156.     return 1
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 光标向下移动
  160.   #--------------------------------------------------------------------------
  161.   def cursor_down(wrap = false)
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 光标向上移动
  165.   #--------------------------------------------------------------------------
  166.   def cursor_up(wrap = false)
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 光标移至下一页
  170.   #--------------------------------------------------------------------------
  171.   def cursor_pagedown
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ● 光标移至上一页
  175.   #--------------------------------------------------------------------------
  176.   def cursor_pageup
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 计算窗口内容的宽度
  180.   #--------------------------------------------------------------------------
  181.   def contents_width
  182.     (item_width + spacing) * item_max - spacing
  183.   end
  184.     #--------------------------------------------------------------------------
  185.   # ● 计算窗口内容的宽度
  186.   #--------------------------------------------------------------------------
  187.   def contents_height
  188.     item_height
  189.   end
  190. end


这个是我出错的,复制到脚本编辑器里是第60行出的错。
作者: taroxd    时间: 2015-9-24 06:42
本帖最后由 taroxd 于 2015-9-24 06:48 编辑
眼中目之瞳 发表于 2015-9-24 05:20
#encoding:utf-8
#==============================================================================
#  ...


我不知道你看的是哪篇教程,所以我只能猜测那篇教程希望让你把 draw_item 的方法体改为 draw_HalfBody 啥啥啥的,并且用例子告诉你方法体是什么

另外我支持教程提供完整源代码,比如说 F1 的实践篇那样

补充内容请尽量用编辑,而不要连贴,谢谢
作者: 眼中目之瞳    时间: 2015-9-24 06:46
本帖最后由 眼中目之瞳 于 2015-9-24 06:59 编辑
taroxd 发表于 2015-9-24 06:42
我不知道你看的是哪篇教程,所以我只能猜测那篇教程希望让你改方法体,并且用例子告诉你方法体是什么

另 ...


就是图书馆里的“教你修改菜单“Ⅳ

https://rpg.blue/thread-226400-1-1.html

连贴问题以后会注意……


这些是之前步骤里要求添加的脚本,不知是不是这里的错误……


@taroxd  
作者: tan12345    时间: 2015-9-24 11:32
这一行错误的代码往上看,是不是前一段代码少了逗号、右括号、点之类的符号,或者是你用了中文状态下的符号?
看提示问题好像出在def draw_actor_HalfBody这个函数里
作者: 眼中目之瞳    时间: 2015-9-24 12:23
tan12345 发表于 2015-9-24 11:32
这一行错误的代码往上看,是不是前一段代码少了逗号、右括号、点之类的符号,或者是你用了中文状态下的符号 ...

按照教程的步骤,横向菜单的脚本做的和教程效果一样,半身像脚本都是复制添加,也就是13楼的截图。在进行最后一步前还是能运行游戏的,但是一旦把“def draw_item(index)”替换掉就会出错。
作者: cinderelmini    时间: 2015-9-24 14:15
本帖最后由 cinderelmini 于 2015-9-24 14:35 编辑
眼中目之瞳 发表于 2015-9-24 05:24
#encoding:utf-8
#==============================================================================
#  ...


出错是因为方法名的括弧里应该填的是参数名字而不是参数具体的值……
比如:

  1. def a(x, y)
  2. ...
  3. end
  4. #或者
  5. def a(a = 1, y = 2)
  6. ...
  7. end
复制代码
这样是成立的,然后:
  1. def a(1, 2)
  2. ...
  3. end
复制代码
这样就并不能成立,你写的呢个方法的括弧里面的rect.x和rect.y就相当于上面的1和2,
去看了教程之后发现是教程的问题,无论是改成“【def draw_actor_HalfBody(actor, x = rect.x, y = rect.y, enabled = false)】(←前提是脚本里有一个叫rect的方法而且返回的是Rect),
还是改成【def draw_actor_HalfBody(actor, rect_x, rect_y, enabled】都不会有问题。

然后根据这个方法的内容来看,方法里的参数完全可以不用,
考虑到似乎是用来替代draw_item的,
可以改成这样
  1.   #--------------------------------------------------------------------------
  2.   # ● 绘制项目
  3.   #--------------------------------------------------------------------------
  4.   def draw_actor_HalfBody(index)
  5.     actor = $game_party.members[index]
  6.     enabled = $game_party.battle_members.include?(actor)
  7.     rect = item_rect(index)
  8.     draw_item_background(index)
  9.     draw_actor_face(actor, rect.x, rect.y, enabled)
  10.     draw_actor_name(actor,rect.x, rect.y+96)
  11.     draw_actor_class(actor,rect.x, rect.y+96+line_height*1)
  12.     draw_actor_icons(actor,rect.x,rect.y+96+line_height*2)
  13.     draw_actor_level(actor,rect.x, rect.y+96+line_height*2)
  14.     draw_actor_hp(actor,rect.x, rect.y+96+line_height*3)
  15.     draw_actor_mp(actor,rect.x,rect.y+96+line_height*5)
  16.     draw_actor_tp(actor,rect.x,rect.y+96+line_height*6)
  17.   end
复制代码
然后在原本使用draw_item(i)的那里,
换成draw_actor_HalfBody(i)
…………

作者: 眼中目之瞳    时间: 2015-9-24 14:57
cinderelmini 发表于 2015-9-24 14:15
出错是因为方法名的括弧里应该填的是参数名字而不是参数具体的值……
比如:这样是成立的,然后:这样就 ...


改完后效果和“taroxd”所给的“修改方法体“一样不显示头像和血条,但可以点击查看,然后”原本使用draw_item(i)的那里‘指的是哪里?
作者: 眼中目之瞳    时间: 2015-9-24 17:02
但还是没效果啊……



@cinderelmini
作者: cinderelmini    时间: 2015-9-24 19:04
本帖最后由 cinderelmini 于 2015-9-24 19:18 编辑

所以你想要什么效果~
以上的做法完全就是把draw_actorHalfBody描绘了一遍而已~
换种说法,只是把原本的draw_item换个名字而已~
而你本身一开始的做法排除错误之后就是这个效果~

如果我没猜错,你是想要描绘新加的半身像,然后用错了方法。
如果是这样,就不是这种做法,
首先把:
  1.   #--------------------------------------------------------------------------
  2.   # ● 绘制项目
  3.   #--------------------------------------------------------------------------
  4.   def draw_actor_HalfBody(index)
  5.     actor = $game_party.members[index]
  6.     enabled = $game_party.battle_members.include?(actor)
  7.     rect = item_rect(index)
  8.     draw_item_background(index)
  9.     draw_actor_face(actor, rect.x, rect.y, enabled)
  10.     draw_actor_name(actor,rect.x, rect.y+96)
  11.     draw_actor_class(actor,rect.x, rect.y+96+line_height*1)
  12.     draw_actor_icons(actor,rect.x,rect.y+96+line_height*2)
  13.     draw_actor_level(actor,rect.x, rect.y+96+line_height*2)
  14.     draw_actor_hp(actor,rect.x, rect.y+96+line_height*3)
  15.     draw_actor_mp(actor,rect.x,rect.y+96+line_height*5)
  16.     draw_actor_tp(actor,rect.x,rect.y+96+line_height*6)
  17.   end
复制代码
这个改回原来的名字【draw_item】,也就是【def draw_item(index)】
然后把刚搬过来改的draw_all_item删掉或者先注释掉,
然后你需要把你写的:
这两个描绘半身像的方法放到这个脚本里来或者放到Window_Base里,
然后在原本的draw_item方法(也就是上面脚本框里的内容)里面,
在 draw_item_background下面插入一行【draw_actor_HalfBody(actor, rect.x, rect.y, enabled)】,
然后把 draw_actor_face(actor, rect.x, rect.y, enabled)】删掉或者注释掉(如果不需要脸图的话)。
做完之后就是这样。。(替换原来的这个脚本)


作者: 眼中目之瞳    时间: 2015-9-24 19:11
本帖最后由 眼中目之瞳 于 2015-9-24 19:37 编辑
cinderelmini 发表于 2015-9-24 19:04
所以你想要什么效果~
以上的做法完全就是把draw_actorHalfBody描绘了一遍而已~
换种说法,只是把原本的draw ...


应该是成功了,“头像”很明显不是原来的样式了





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