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

Project1

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

[已经过期] 物品内容横向化,如何让其内容翻页?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-6-23
帖子
28
跳转到指定楼层
1
发表于 2010-12-25 14:59:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x


如图,左右移动的时候,横向不会翻页……矩形光标直接出去- -

原Window_Selectable类似乎也并没有横向移动的方法
本人菜鸟……谢谢各位哥哥姐姐了

Lv2.观梦者

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

2
发表于 2010-12-25 15:09:19 | 只看该作者
话说你用了什么脚本啊?发上来看看,我们好帮你啊。

魔法麻将独立游戏制作中,欢迎热情的测试员与UI设计师合作开发~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-6-23
帖子
28
3
 楼主| 发表于 2010-12-25 15:13:20 | 只看该作者
#==============================================================================
# ■ Window_Item
#------------------------------------------------------------------------------
#  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
#==============================================================================

class Harts_Window_ItemList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(170, 160, 460, 180)
    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 = []
  end
  #--------------------------------------------------------------------------
  # ● アイテム一覧設定
  # command : 選択中のコマンド
  #--------------------------------------------------------------------------
  def set_item(command)
    refresh
    case command
    when 0
      @column_max = $data_items.size
      for i in 1...$data_items.size
        if $game_party.item_number(i) > 0
          @data.push($data_items[i])
        end
      end
    when 1
      for i in 1...$data_items.size
        if $data_items[i].element_set.include?($data_system.elements.index("音乐类")) and $game_party.item_number(i) > 0
          @data.push($data_items[i])
        end
      end
    when 2
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("棋艺类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 3
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("书法类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 4
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("绘画类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 5
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("医药类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 6
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("毒药类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 7
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0
          @data.push($data_weapons[i])
        end
      end
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0
          @data.push($data_armors[i])
        end
      end
    when 8
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("武学类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 9
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("园艺类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 10
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("食物类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 11
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("茶酒类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    when 12
      for i in 1...$data_items.size
        if ($data_items[i].element_set.include?($data_system.elements.index("其他类")) and $game_party.item_number(i) > 0)
          @data.push($data_items[i])
        end
      end
    end
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width-32, height-32)
      self.contents.clear
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 種類別アイテム数の取得
  #--------------------------------------------------------------------------
  def item_number
    return @item_max
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  # index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_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 = index * 24
    y = 2
    #self.contents.fill_rect((self.width-64)-index * 24, y, 10, 10, Color.new(0, 0, 0, 0))
    self.contents.draw_text2(self.width-56-x-4, y, 50, 800, item.name, 0)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    # 光标位置不满 0 的情况下
    if @index < 0
      self.cursor_rect.empty
      return
    end
    # 获取当前的行
    row = @index / @column_max
    # 当前行被显示开头行前面的情况下
    if row < self.top_row
      # 从当前行向开头行滚动
      self.top_row = row
    end
    # 当前行被显示末尾行之后的情况下
    if row > self.top_row + (self.page_row_max - 1)
      # 从当前行向末尾滚动
      self.top_row = row - (self.page_row_max - 1)
    end
    # 计算光标的宽
    cursor_width = self.width / @column_max - 32
    cursor_height = self.height - 4
    # 计算光标坐标
    x = @index * 24
    y = 0
    # 更新国标矩形
    self.cursor_rect.set(self.width-56-x-8, y, 32, cursor_height)
  end
  #_________________________________________________
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
  
end

其中分类的方法,绘制方法,窗口矩形框刷新都已经重新定义- -

都在这里了,其实我就是想知道横向移动的方法而已,如果有之类的范例也是可以的
回复 支持 反对

使用道具 举报

Lv3.寻梦者

昨日的黄昏

梦石
0
星屑
1005
在线时间
937 小时
注册时间
2006-11-5
帖子
4128

第2届短篇游戏比赛季军第3届短篇游戏大赛小游戏及其他组季军

4
发表于 2010-12-25 15:36:24 | 只看该作者
小孩子技术不错啊~
这里需要说说Window_Selectable类里面的东西~
矩形光标的翻页,是和他的起头和结尾相关的

那么再回头看Window_Selectable

def row_max
   # 由项目数和列数计算出行数
   return (@item_max + @column_max - 1) / @column_max      #行数为,项目数+列数-1/列数.
end
找到了嘛?既然全部都是列数~那么返回的算法可以改成
return @item_max

然后我看了你的文字矩形绘制限制是self.contents = Bitmap.new(width-32, height-32)
如果要让其移动就也需要改变成self.contents = Bitmap.new(row_max
*32, height-32)

这样就是完成了正常的区域限制,点到此处我想你也已经豁然开朗了吧
[url=http://weibo.com/2238291690?s=6uyXnP]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 09:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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