设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2648|回复: 6
打印 上一主题 下一主题

[已经过期] 如何制作做菜系统?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2010-8-5
帖子
10
跳转到指定楼层
1
发表于 2011-2-5 16:12:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
     想用脚本制作出类似《牧场物语》中做菜系统:即,出现做菜窗口后,会出现多种食材;当选中它们中的某几项后,它们会出现在已选中的窗口中。点击确定,开始做菜。这时,如果你选择的材料与系统默认的菜谱相同,比如:鱼+杜鹃花+醋=杜鹃醉鱼。则显示做菜成功!如果不相同,则显示做菜失败!
    我是脚本初学者,只会修改简单的脚本。现我修改的脚本如下,总是没法实现上面选中的食材出现在下面选定的窗口中,希望哪位大人能帮我实现下这个做菜系统:

class Scene_Zuocai
  

  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成食材窗口
    @caidan_window = Window_Caidan.new
    @caidan1_window = Window_Caidan1.new
    @shicai_window = Window_Shicai.new
    @shicai2_window = Window_Shicai2.new

    # 执行过度
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换就中断循环
      if $scene != self
        break
      end
    end
    # 装备过渡
    Graphics.freeze
    # 释放窗口
    @caidan_window.dispose
    @shicai_window.dispose
    @caidan1_window.dispose
    @shicai2_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @caidan_window.update
    @shicai_window.update
    @caidan1_window.update
    @shicai2_window.update
    # 食材窗口被激活的情况下: 调用 update_item
    if @shicai_window.active
      update_item
      return
    end
    # 食材2窗口被激活的情况下: 调用 update_item2
    if @shicai2_window.active
      update_item2
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (物品窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_item
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Map.new
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取物品窗口当前选中的物品数据
      @item = @shicai_window.item
      
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      $game_party.lose_item(@item.id, 1)
      $xuanwuping = @shicai_window.item
      # 再描绘物品窗口的项目
      @shicai_window.draw_item(@shicai_window.index)
      
      
      

      return
    end
  
  end
  
end





#==============================================================================
# ■ Window_Shicai
#------------------------------------------------------------------------------
#  物品画面、战斗画面、显示浏览物品的窗口。
#==============================================================================

class Window_Shicai < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 640, 256)
    @column_max = 2
    refresh
    self.index = 0

  end
  #--------------------------------------------------------------------------
  # ● 获取物品
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # 添加物品
    for i in 40...49
      if $game_party.item_number(i) > 0
        @data.push($data_items[i])
      end
    end
   
    # 如果项目数不是 0 就生成位图、重新描绘全部项目
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 描绘项目
  #     index : 项目编号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # ● 刷新帮助文本
  #--------------------------------------------------------------------------
end





#==============================================================================
# ■ Window_Shicai
#------------------------------------------------------------------------------
#  物品画面、战斗画面、显示浏览物品的窗口。
#==
class Window_Shicai2 < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 384, 640, 96)
    @column_max = 2
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 获取物品
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # 添加物品
   
    @data.push($xuanwuping)
      
  end
  #--------------------------------------------------------------------------
  # ● 描绘项目
  #     index : 项目编号
  #--------------------------------------------------------------------------
end




#==============================================================================
# ■ Window_Shicai
#------------------------------------------------------------------------------
#  物品画面、战斗画面、显示浏览物品的窗口。
#===========================================================================
class Window_Caidan < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, 32, "请选择食材")
  end
end






#==============================================================================
# ■ Window_Shicai1
#------------------------------------------------------------------------------
#  物品画面、战斗画面、显示浏览物品的窗口。
#============================================================================
class Window_Caidan1 < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 320, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, 32, "已选中食材")
  end
end

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

2
发表于 2011-2-5 16:33:35 | 只看该作者
其实可以改用合成系统……在外面写着是烹饪,没有人会怀疑你。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2010-8-5
帖子
10
3
 楼主| 发表于 2011-2-5 20:41:38 | 只看该作者
回复 忧雪の伤 的帖子

其实这个我也想过,主要是我有个制药系统用的是物品合成,所以怕用合成系统,两个系统会一起出现,有什么方法能使他们单独出现吗
回复 支持 反对

使用道具 举报

Lv1.梦旅人

赤瞳

梦石
0
星屑
50
在线时间
132 小时
注册时间
2010-11-28
帖子
515
4
发表于 2011-2-5 21:15:26 | 只看该作者
两个系统的脚本名字保持有差异,
然后,把界面改一下,就可以了啊鲁~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2010-8-5
帖子
10
5
 楼主| 发表于 2011-2-5 21:30:17 | 只看该作者
回复 银·乌尔 的帖子

明白了!但是我想实现的是让玩家自行选择几种食材,如果合理,就会做出菜来。如果选择的食材不合理,就做出废品来。也相当于是游戏中带的一个小游戏。不晓得这个效果能不能用合成系统体现?
之前我有用事件,即分歧套分歧的做法做过,但是分歧太多,又都是干巴巴的选择项,效果不理想,所以想到用脚本的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

赤瞳

梦石
0
星屑
50
在线时间
132 小时
注册时间
2010-11-28
帖子
515
6
发表于 2011-2-5 21:48:28 | 只看该作者
这个,如果银要做的话,一定很耗时,现在连思路都很模糊,
用N个数组来先行决定能做的N道菜所需要的道具ID,
然后在这些数组之外的ID的道具合成的话,就用随机数决定做出哪种废品~~
好吧,希望这个思路有用到吧...
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3852
在线时间
1582 小时
注册时间
2006-5-5
帖子
2743
7
发表于 2011-2-6 16:39:30 | 只看该作者
可以试着用反复的条件分歧来实现,这样比用脚本出现不兼容的情况要少。
当然,你的逻辑必须清楚
步兵中尉
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-1 08:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表