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

Project1

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

物品分类改成两排

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-8-10
帖子
237
跳转到指定楼层
1
发表于 2007-8-19 15:18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-8-10
帖子
237
2
 楼主| 发表于 2007-8-19 15:18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

3
发表于 2007-8-19 16:06:16 | 只看该作者
你参考以下这个来进行修改。

  1. class Window_Item < Window_Selectable
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 64, 640, 416)
  7.     @column_max = 2
  8.     refresh
  9.     self.index = 0
  10.     # 战斗中的情况下将窗口移至中央并将其半透明化
  11.     if $game_temp.in_battle
  12.       self.y = 64
  13.       self.height = 256
  14.       self.back_opacity = 160
  15.     end
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 获取物品
  19.   #--------------------------------------------------------------------------
  20.   def item
  21.     return @data[self.index]
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 刷新
  25.   #--------------------------------------------------------------------------
  26.   def refresh
  27.     if self.contents != nil
  28.       self.contents.dispose
  29.       self.contents = nil
  30.     end
  31.     @data = []
  32.     # 添加报务
  33.     for i in 1...$data_items.size
  34.       if $game_party.item_number(i) > 0
  35.         @data.push($data_items[i])
  36.       end
  37.     end
  38.     # 在战斗中以外添加武器、防具
  39.     unless $game_temp.in_battle
  40.       for i in 1...$data_weapons.size
  41.         if $game_party.weapon_number(i) > 0
  42.           @data.push($data_weapons[i])
  43.         end
  44.       end
  45.       for i in 1...$data_armors.size
  46.         if $game_party.armor_number(i) > 0
  47.           @data.push($data_armors[i])
  48.         end
  49.       end
  50.     end
  51.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  52.     @item_max = @data.size
  53.     if @item_max > 0
  54.       self.contents = Bitmap.new(width - 32, row_max * 32)
  55.       for i in 0...@item_max
  56.         draw_item(i)
  57.       end
  58.     end
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 描绘项目
  62.   #     index : 项目编号
  63.   #--------------------------------------------------------------------------
  64.   def draw_item(index)
  65.     item = @data[index]
  66.     case item
  67.     when RPG::Item
  68.       number = $game_party.item_number(item.id)
  69.     when RPG::Weapon
  70.       number = $game_party.weapon_number(item.id)
  71.     when RPG::Armor
  72.       number = $game_party.armor_number(item.id)
  73.     end
  74.     if item.is_a?(RPG::Item) and
  75.        $game_party.item_can_use?(item.id)
  76.       self.contents.font.color = normal_color
  77.     else
  78.       self.contents.font.color = disabled_color
  79.     end
  80.     x = 4 + index % 2 * (288 + 32)
  81.     y = index / 2 * 32
  82.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  83.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  84.     bitmap = RPG::Cache.icon(item.icon_name)
  85.     opacity = self.contents.font.color == normal_color ? 255 : 128
  86.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  87.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  88.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  89.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 刷新帮助文本
  93.   #--------------------------------------------------------------------------
  94.   def update_help
  95.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  96.   end
  97. end
复制代码

找出来相应的部分并作坐标修改。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-8-10
帖子
237
4
 楼主| 发表于 2007-8-19 16:43:04 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
431
在线时间
125 小时
注册时间
2006-11-2
帖子
1200
5
发表于 2007-8-19 17:25:46 | 只看该作者
  1. # ■ 物品分類
  2. #==============================================================================
  3. # ■ Harts_Window_ItemTitle
  4. #------------------------------------------------------------------------------
  5. #  アイテム画面で、タイトルを表示するウィンドウ。
  6. #==============================================================================

  7. class Harts_Window_ItemTitle < Window_Base
  8. #--------------------------------------------------------------------------
  9. # ● オブジェクト初期化
  10. #--------------------------------------------------------------------------
  11. def initialize
  12. super(0, 0, 160, 64)
  13. self.contents = Bitmap.new(width - 32, height - 32)
  14. self.contents.clear
  15. self.contents.font.color = normal_color
  16. self.contents.draw_text(4, 0, 120, 32, $data_system.words.item, 1)
  17. end
  18. end

  19. #==============================================================================
  20. # ■ Harts_Window_ItemCommand
  21. #------------------------------------------------------------------------------
  22. #  アイテムの種別選択を行うウィンドウです。
  23. #==============================================================================

  24. class Harts_Window_ItemCommand < Window_Selectable
  25. #--------------------------------------------------------------------------
  26. # ● オブジェクト初期化
  27. #--------------------------------------------------------------------------
  28. def initialize
  29. super(0, 64, 160, 288)
  30. self.contents = Bitmap.new(width - 32, height - 32)
  31. @item_max = 8

  32. @commands = ["平時用", "戰鬥用", $data_system.words.weapon, $data_system.words.armor1, $data_system.words.armor2, $data_system.words.armor3, $data_system.words.armor4, "不能用"]
  33. refresh
  34. self.index = 0
  35. end
  36. #--------------------------------------------------------------------------
  37. # ● リフレッシュ
  38. #--------------------------------------------------------------------------
  39. def refresh
  40. self.contents.clear
  41. for i in 0...@item_max
  42. draw_item(i, normal_color)
  43. end
  44. end
  45. #--------------------------------------------------------------------------
  46. # ● 項目の描画
  47. # index : 項目番号
  48. # color : 文字色
  49. #--------------------------------------------------------------------------
  50. def draw_item(index, color)
  51. self.contents.font.color = color
  52. y = index * 32
  53. self.contents.draw_text(4, y, 128, 32, @commands[index])
  54. end
  55. #--------------------------------------------------------------------------
  56. # ● ヘルプテキスト更新
  57. #--------------------------------------------------------------------------
  58. def update_help
  59. case self.index
  60. when 0
  61. @text = @commands[0]
  62. when 1
  63. @text = @commands[1]
  64. when 2
  65. @text = @commands[2]
  66. when 3
  67. @text = @commands[3]
  68. when 4
  69. @text = @commands[4]
  70. when 5
  71. @text = @commands[5]
  72. when 6
  73. @text = @commands[6]
  74. when 7
  75. @text = @commands[7]
  76. end
  77. @help_window.set_text(@text)
  78. end
  79. end

  80. #==============================================================================
  81. # ■ Window_Item
  82. #------------------------------------------------------------------------------
  83. #  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
  84. #==============================================================================

  85. class Harts_Window_ItemList < Window_Selectable
  86. #--------------------------------------------------------------------------
  87. # ● オブジェクト初期化
  88. #--------------------------------------------------------------------------
  89. def initialize
  90. super(160, 0, 480, 416)
  91. @column_max = 2
  92. refresh
  93. self.index = 0
  94. end
  95. #--------------------------------------------------------------------------
  96. # ● アイテムの取得
  97. #--------------------------------------------------------------------------
  98. def item
  99. return @data[self.index]
  100. end
  101. #--------------------------------------------------------------------------
  102. # ● リフレッシュ
  103. #--------------------------------------------------------------------------
  104. def refresh
  105. if self.contents != nil
  106. self.contents.dispose
  107. self.contents = nil
  108. end
  109. @data = []
  110. end
  111. #--------------------------------------------------------------------------
  112. # ● アイテム一覧設定
  113. # command : 選択中のコマンド
  114. #--------------------------------------------------------------------------
  115. def set_item(command)
  116. refresh
  117. case command
  118. when 0
  119. for i in 1...$data_items.size
  120. if ($data_items[i].occasion == 0 or $data_items[i].occasion == 2) and $game_party.item_number(i) > 0
  121. @data.push($data_items[i])
  122. end
  123. end
  124. when 1
  125. for i in 1...$data_items.size
  126. if ($data_items[i].occasion == 1 and $game_party.item_number(i) > 0)
  127. @data.push($data_items[i])
  128. end
  129. end
  130. when 2
  131. for i in 1...$data_weapons.size
  132. if $game_party.weapon_number(i) > 0
  133. @data.push($data_weapons[i])
  134. end
  135. end
  136. when 3
  137. for i in 1...$data_armors.size
  138. if $data_armors[i].kind == 0 and $game_party.armor_number(i) > 0
  139. @data.push($data_armors[i])
  140. end
  141. end
  142. when 4
  143. for i in 1...$data_armors.size
  144. if $data_armors[i].kind == 1 and $game_party.armor_number(i) > 0
  145. @data.push($data_armors[i])
  146. end
  147. end
  148. when 5
  149. for i in 1...$data_armors.size
  150. if $data_armors[i].kind == 2 and $game_party.armor_number(i) > 0
  151. @data.push($data_armors[i])
  152. end
  153. end
  154. when 6
  155. for i in 1...$data_armors.size
  156. if $data_armors[i].kind == 3 and $game_party.armor_number(i) > 0
  157. @data.push($data_armors[i])
  158. end
  159. end
  160. when 7
  161. for i in 1...$data_items.size
  162. if $data_items[i].occasion == 3 and $game_party.item_number(i) > 0
  163. @data.push($data_items[i])
  164. end
  165. end
  166. end
  167. # 項目数が 0 でなければビットマップを作成し、全項目を描画
  168. @item_max = @data.size
  169. if @item_max > 0
  170. self.contents = Bitmap.new(width - 32, row_max * 32)
  171. self.contents.clear
  172. for i in 0...@item_max
  173. draw_item(i)
  174. end
  175. end
  176. end
  177. #--------------------------------------------------------------------------
  178. # ● 種類別アイテム数の取得
  179. #--------------------------------------------------------------------------
  180. def item_number
  181. return @item_max
  182. end
  183. #--------------------------------------------------------------------------
  184. # ● 項目の描画
  185. # index : 項目番号
  186. #--------------------------------------------------------------------------
  187. def draw_item(index)
  188. item = @data[index]
  189. case item
  190. when RPG::Item
  191. number = $game_party.item_number(item.id)
  192. when RPG::Weapon
  193. number = $game_party.weapon_number(item.id)
  194. when RPG::Armor
  195. number = $game_party.armor_number(item.id)
  196. end
  197. if item.is_a?(RPG::Item) and
  198. $game_party.item_can_use?(item.id)
  199. self.contents.font.color = normal_color
  200. else
  201. self.contents.font.color = disabled_color
  202. end
  203. x = 4 + index % 2 * 240
  204. y = index / 2  * 32
  205. bitmap = RPG::Cache.icon(item.icon_name)
  206. opacity = self.contents.font.color == normal_color ? 255 : 128
  207. self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  208. self.contents.draw_text(x + 28, y, 106, 32, item.name, 0)
  209. self.contents.draw_text(x + 180, y, 8, 32, ":", 1)
  210. self.contents.draw_text(x + 188, y, 12, 32, number.to_s, 2)
  211. end
  212. #--------------------------------------------------------------------------
  213. # ● ヘルプテキスト更新
  214. #--------------------------------------------------------------------------
  215. def update_help
  216. @help_window.set_text(self.item == nil ? "" : self.item.description)
  217. end
  218. end

  219. #==============================================================================
  220. # ■ Harts_Scene_Item
  221. #------------------------------------------------------------------------------
  222. #  アイテム画面の処理を行うクラスです。再定義
  223. #==============================================================================

  224. class Scene_Item
  225. #--------------------------------------------------------------------------
  226. # ● メイン処理
  227. #--------------------------------------------------------------------------
  228. def main
  229. # タイトルウィンドウを作成
  230. @itemtitle_window = Harts_Window_ItemTitle.new
  231. #コマンドウィンドウを作成
  232. @itemcommand_window = Harts_Window_ItemCommand.new
  233. @command_index = @itemcommand_window.index
  234. #アイテムウィンドウを作成
  235. @itemlist_window = Harts_Window_ItemList.new
  236. @itemlist_window.active = false
  237. #ヘルプウィンドウを作成
  238. @help_window = Window_Help.new
  239. @help_window.x = 0
  240. @help_window.y = 416
  241. # ヘルプウィンドウを関連付け
  242. @itemcommand_window.help_window = @help_window
  243. @itemlist_window.help_window = @help_window
  244. # ターゲットウィンドウを作成 (不可視・非アクティブに設定)
  245. @target_window = Window_Target.new
  246. @target_window.visible = false
  247. @target_window.active = false
  248. # アイテムウィンドウ内容表示
  249. @itemlist_window.set_item(@command_index)
  250. # トランジション実行
  251. Graphics.transition
  252. # メインループ
  253. loop do
  254. # ゲーム画面を更新
  255. Graphics.update
  256. # 入力情報を更新
  257. Input.update
  258. # フレーム更新
  259. update
  260. # 画面が切り替わったらループを中断
  261. if $scene != self
  262. break
  263. end
  264. end
  265. # トランジション準備
  266. Graphics.freeze
  267. # ウィンドウを解放
  268. @itemtitle_window.dispose
  269. @itemcommand_window.dispose
  270. @itemlist_window.dispose
  271. @help_window.dispose
  272. @target_window.dispose
  273. end
  274. #--------------------------------------------------------------------------
  275. # ● フレーム更新
  276. #--------------------------------------------------------------------------
  277. def update
  278. # ウィンドウを更新
  279. @itemtitle_window.update
  280. @itemcommand_window.update
  281. @itemlist_window.update
  282. @help_window.update
  283. @target_window.update
  284. if @command_index != @itemcommand_window.index
  285. @command_index = @itemcommand_window.index
  286. @itemlist_window.set_item(@command_index)
  287. end
  288. # コマンドウィンドウがアクティブの場合: update_itemcommand を呼ぶ
  289. if @itemcommand_window.active
  290. update_itemcommand
  291. return
  292. end
  293. # アイテムウィンドウがアクティブの場合: update_itemlist を呼ぶ
  294. if @itemlist_window.active
  295. update_itemlist
  296. return
  297. end
  298. # ターゲットウィンドウがアクティブの場合: update_target を呼ぶ
  299. if @target_window.active
  300. update_target
  301. return
  302. end
  303. end
  304. #--------------------------------------------------------------------------
  305. # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  306. #--------------------------------------------------------------------------
  307. def update_itemcommand
  308. # B ボタンが押された場合
  309. if Input.trigger?(Input::B)
  310. # キャンセル SE を演奏
  311. $game_system.se_play($data_system.cancel_se)
  312. # メニュー画面に切り替え
  313. $scene = Scene_Menu.new(0)
  314. return
  315. end
  316. # C ボタンが押された場合
  317. if Input.trigger?(Input::C)
  318. # 選択中のコマンドのアイテムがない場合
  319. if @itemlist_window.item_number == 0
  320. # ブザー SE を演奏
  321. $game_system.se_play($data_system.buzzer_se)
  322. return
  323. end
  324. # 決定 SE を演奏
  325. $game_system.se_play($data_system.decision_se)
  326. # アイテムウィンドウをアクティブにする
  327. @itemcommand_window.active = false
  328. @itemlist_window.active = true
  329. @itemlist_window.index = 0
  330. return
  331. end
  332. end
  333. #--------------------------------------------------------------------------
  334. # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
  335. #--------------------------------------------------------------------------
  336. def update_itemlist
  337. # B ボタンが押された場合
  338. if Input.trigger?(Input::B)
  339. # キャンセル SE を演奏
  340. $game_system.se_play($data_system.cancel_se)
  341. # アイテムウィンドウをアクティブにする
  342. @itemcommand_window.active = true
  343. @itemlist_window.active = false
  344. @itemlist_window.index = 0
  345. @itemcommand_window.index = @command_index
  346. return
  347. end
  348. # C ボタンが押された場合
  349. if Input.trigger?(Input::C)
  350. # アイテムウィンドウで現在選択されているデータを取得
  351. @item = @itemlist_window.item
  352. # 使用アイテムではない場合
  353. unless @item.is_a?(RPG::Item)
  354. # ブザー SE を演奏
  355. $game_system.se_play($data_system.buzzer_se)
  356. return
  357. end
  358. # 使用できない場合
  359. unless $game_party.item_can_use?(@item.id)
  360. # ブザー SE を演奏
  361. $game_system.se_play($data_system.buzzer_se)
  362. return
  363. end
  364. # 決定 SE を演奏
  365. $game_system.se_play($data_system.decision_se)
  366. # 効果範囲が味方の場合
  367. if @item.scope >= 3
  368. # ターゲットウィンドウをアクティブ化
  369. @itemlist_window.active = false
  370. @target_window.x = 304
  371. @target_window.visible = true
  372. @target_window.active = true
  373. # 効果範囲 (単体/全体) に応じてカーソル位置を設定
  374. if @item.scope == 4 || @item.scope == 6
  375. @target_window.index = -1
  376. else
  377. @target_window.index = 0
  378. end
  379. # 効果範囲が味方以外の場合
  380. else
  381. # コモンイベント ID が有効の場合
  382. if @item.common_event_id > 0
  383. # コモンイベント呼び出し予約
  384. $game_temp.common_event_id = @item.common_event_id
  385. # アイテムの使用時 SE を演奏
  386. $game_system.se_play(@item.menu_se)
  387. # 消耗品の場合
  388. if @item.consumable
  389. # 使用したアイテムを 1 減らす
  390. $game_party.lose_item(@item.id, 1)
  391. # アイテムウィンドウの項目を再描画
  392. @itemlist_window.draw_item(@itemlist_window.index)
  393. end
  394. # マップ画面に切り替え
  395. $scene = Scene_Map.new
  396. return
  397. end
  398. end
  399. return
  400. end
  401. end
  402. #--------------------------------------------------------------------------
  403. # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  404. #--------------------------------------------------------------------------
  405. def update_target
  406. # B ボタンが押された場合
  407. if Input.trigger?(Input::B)
  408. # キャンセル SE を演奏
  409. $game_system.se_play($data_system.cancel_se)
  410. # アイテム切れなどで使用できなくなった場合
  411. unless $game_party.item_can_use?(@item.id)
  412. # アイテムウィンドウの内容を再作成
  413. @itemlist_window.refresh
  414. end
  415. # ターゲットウィンドウを消去
  416. @itemlist_window.active = true
  417. @target_window.visible = false
  418. @target_window.active = false
  419. @itemlist_window.set_item(@command_index)
  420. return
  421. end
  422. # C ボタンが押された場合
  423. if Input.trigger?(Input::C)
  424. # アイテムを使い切った場合
  425. if $game_party.item_number(@item.id) == 0
  426. # ブザー SE を演奏
  427. $game_system.se_play($data_system.buzzer_se)
  428. return
  429. end
  430. # ターゲットが全体の場合
  431. if @target_window.index == -1
  432. # パーティ全体にアイテムの使用効果を適用
  433. used = false
  434. for i in $game_party.actors
  435. used |= i.item_effect(@item)
  436. end
  437. end
  438. # ターゲットが単体の場合
  439. if @target_window.index >= 0
  440. # ターゲットのアクターにアイテムの使用効果を適用
  441. target = $game_party.actors[@target_window.index]
  442. used = target.item_effect(@item)
  443. end
  444. # アイテムを使った場合
  445. if used
  446. # アイテムの使用時 SE を演奏
  447. $game_system.se_play(@item.menu_se)
  448. # 消耗品の場合
  449. if @item.consumable
  450. # 使用したアイテムを 1 減らす
  451. $game_party.lose_item(@item.id, 1)
  452. # アイテムウィンドウの項目を再描画
  453. @itemlist_window.draw_item(@itemlist_window.index)
  454. @itemlist_window.set_item(@command_index)
  455. end
  456. # ターゲットウィンドウの内容を再作成
  457. @target_window.refresh
  458. # 全滅の場合
  459. if $game_party.all_dead?
  460. # ゲームオーバー画面に切り替え
  461. $scene = Scene_Gameover.new
  462. return
  463. end
  464. # コモンイベント ID が有効の場合
  465. if @item.common_event_id > 0
  466. # コモンイベント呼び出し予約
  467. $game_temp.common_event_id = @item.common_event_id
  468. # マップ画面に切り替え
  469. $scene = Scene_Map.new
  470. return
  471. end
  472. end
  473. # アイテムを使わなかった場合
  474. unless used
  475. # ブザー SE を演奏
  476. $game_system.se_play($data_system.buzzer_se)
  477. end
  478. return
  479. end
  480. end
  481. end
复制代码
和记忆一起封存着的ID...
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-8-10
帖子
237
6
 楼主| 发表于 2007-8-19 17:43:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-6-26 04:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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