Project1
标题:
道具选择窗口追加缩略图
[打印本页]
作者:
wingzeroplus
时间:
2013-4-22 21:08
标题:
道具选择窗口追加缩略图
本帖最后由 wingzeroplus 于 2013-4-24 21:23 编辑
#==============================================================================
# □ アイテム選択の処理実装 (for XP)
#------------------------------------------------------------------------------
# Version : 1_20120701
# by サリサ・タイクーン
# http://www.tycoon812.com/rgss/
#==============================================================================
#==============================================================================
# □ 素材スイッチ
#==============================================================================
$rgsslab = {} if $rgsslab == nil
$rgsslab["アイテム選択の処理実装"] = true
if $rgsslab["アイテム選択の処理実装"]
# カスタマイズポイントは、ありません。
module RGSSLAB end
#==============================================================================
# □ RGSSLAB::Item_Select_Process [module]
#==============================================================================
module RGSSLAB::Item_Select_Process
#--------------------------------------------------------------------------
# ○ 素材設定用の定数定義
#--------------------------------------------------------------------------
MATERIAL_NAME = "アイテム選択の処理実装"
VERSION = 1
RELEASE = 20120701
end
#==============================================================================
# ■ Game_Temp [class]
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :selected_item
#--------------------------------------------------------------------------
# ● オブジェクト初期化 [エイリアス]
#--------------------------------------------------------------------------
alias item_select_process_initialize initialize
def initialize
item_select_process_initialize
@selected_item = 0
end
end
#==============================================================================
# ■ Game_Party [class]
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ○ アイテムオブジェクトの配列取得 (武器と防具を含む)
#--------------------------------------------------------------------------
def items
result = []
for i in @items.keys.sort do result.push($data_items[i]) if $data_items[i].id >100 and @items[i] > 0 end
# for i in @items.keys.sort do result.push($data_items[i]) if @items[i] > 0 end
# for i in @weapons.keys.sort do result.push($data_weapons[i]) if @weapons[i] > 0 end
# for i in @armors.keys.sort do result.push($data_armors[i]) if @armors[i] > 0 end
return result
end
end
#==============================================================================
# ■ Interpreter [class]
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# ○ アイテム選択の処理の呼び出し
# message : 表示メッセージ
#--------------------------------------------------------------------------
def call_item_select_process(message = "")
@flag = true if $rgsslab["スクリプト・改"]
$scene = Scene_ItemSelectProcess.new(message)
@index += 1
return false
end
end
#==============================================================================
# ■ Window_Base [class]
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ○ 項目を描画する矩形の取得
# index : 項目番号
#--------------------------------------------------------------------------
def item_rect(index)
rect = Rect.new(0, 0, 0, 0)
rect.width = contents.width / @column_max
rect.height = 32
rect.x = index % @column_max * rect.width + (index % @column_max * 20)
rect.y = index / @column_max * 32
return rect
end
end
#==============================================================================
# □ Window_ItemSelectProcess [class]
#==============================================================================
class Window_ItemSelectProcess < Window_Selectable
#--------------------------------------------------------------------------
# ○ オブジェクト初期化 [オーバーライド]
#--------------------------------------------------------------------------
def initialize
super(320, 0, 320, 480)
self.back_opacity = 128
@column_max = 1
self.index = 0
refresh
end
#--------------------------------------------------------------------------
# ○ アイテムの取得
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
@data = []
for item in $game_party.items
@data.push(item)
end
@item_max = @data.size
h = row_max * 32
if h == 0
h = 1
end
self.contents = Bitmap.new(width - 32, h)
for i in 0...@item_max do draw_item(i) end
end
#--------------------------------------------------------------------------
# ○ 項目の描画
# index : 項目数
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
item = @data[index]
if item != nil
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
rect.width -= 4
draw_item_name(item, rect.x, rect.y)
self.contents.draw_text(rect.x + 240, rect.y, 16, 32, ":", 1)
self.contents.draw_text(rect.x + 256, rect.y, 24, 32, number.to_s, 2)
end
end
#
end
#==============================================================================
# □ Window_ItemSelectProcess_Message [class]
#==============================================================================
class Window_ItemSelectProcess_Message < Window_Base
#--------------------------------------------------------------------------
# ○ オブジェクト初期化 [オーバーライド]
# message : メッセージ
#--------------------------------------------------------------------------
def initialize(message)
super(0, 320, 320, 160)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 128
refresh(message)
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
# message : メッセージ
#--------------------------------------------------------------------------
def refresh(message = nil)
self.contents.clear
rect = self.contents.text_size(message)
self.contents.draw_text(rect, message)
end
end
#==============================================================================
# □ Scene_ItemSelectProcess [class]
#==============================================================================
class Scene_ItemSelectProcess
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
# message : メッセージ
#--------------------------------------------------------------------------
def initialize(message)
@message = message
end
#--------------------------------------------------------------------------
# ○ メイン処理
#--------------------------------------------------------------------------
def main
start
Graphics.transition
Input.update
loop do
Graphics.update
Input.update
update
break if $scene != self
end
Graphics.update
Graphics.freeze
terminate
end
#--------------------------------------------------------------------------
# ○ 開始処理
#--------------------------------------------------------------------------
def start
@spriteset = Spriteset_Map.new
@select_window = Window_ItemSelectProcess.new
@message_window = Window_ItemSelectProcess_Message.new(@message)
end
#--------------------------------------------------------------------------
# ○ 終了処理
#--------------------------------------------------------------------------
def terminate
@spriteset.dispose
@select_window.dispose
@message_window.dispose
end
#--------------------------------------------------------------------------
# ○ フレーム更新
#--------------------------------------------------------------------------
def update
@select_window.update
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
# $game_temp.selected_item = 0
# $scene = Scene_Map.new
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
case @select_window.item
when RPG::Item ; $game_temp.selected_item = @select_window.item.id
when RPG::Weapon ; $game_temp.selected_item = @select_window.item.id + 1000
when RPG::Armor ; $game_temp.selected_item = @select_window.item.id + 2000
end
$scene = Scene_Map.new
end
end
end
end
复制代码
原版脚本被我稍微改变了下,左上方是空白的
现在想在这个里面追加一个道具缩略图窗口 super的位置和大小是(0, 0, 320, 320)
根据选择窗口里光标指向的道具ID, 在这个新窗口中央刷新并显示PICTURE文件夹下 同ID名在道具图片,自己弄了半天都不行
求高人帮忙
作者:
芯☆淡茹水
时间:
2013-4-23 20:38
呃~~,可不可以把脚本弄好一点,那个,,,,复制到新工程都报错,那样还怎么改啊。
特别是那个定义的 @message 是什么?
作者:
wingzeroplus
时间:
2013-4-23 21:30
我直接上工程
Project10086.zip
2013-4-23 21:29 上传
点击文件名下载附件
208.42 KB, 下载次数: 66
作者:
芯☆淡茹水
时间:
2013-4-24 19:14
本帖最后由 芯☆淡茹水 于 2013-4-24 19:17 编辑
唔~,弄好了。
原脚本里新加了个窗口。新加的地方有标识。物品大图命名为 --> 物品名 ,保存在 pictures 文件夹
范例的两张图片是随意找的,320X320的大图(满窗口)。要显示小图可改新建窗口里的坐标。
Project10086.rar
(375.27 KB, 下载次数: 60)
2013-4-24 19:14 上传
点击文件名下载附件
作者:
wingzeroplus
时间:
2013-4-24 21:22
非常感谢,原来关键的是那个@select_window.item
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1