赞 | 0 |
VIP | 1 |
好人卡 | 11 |
积分 | 1 |
经验 | 17928 |
最后登录 | 2018-9-22 |
在线时间 | 461 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 461 小时
- 注册时间
- 2008-11-19
- 帖子
- 607
|
本帖最后由 sai90306 于 2012-5-12 03:39 编辑
以下是我做的測試用選單(只是做個樣子來突顯我的問題沒有任何功能)
這是選單的基本樣子
這是選單index =1 和 =2的比較
可以發現兩個index之間有一段藍色的距離
請問要如何調整才不會錯位?
我嘗試調整
cursor_width = width / @column_max - 32
和
x = index % @column_max * (cursor_width + 32)
不過失敗了@@
附上用到的兩個腳本(先向班竹抱歉了用代碼框發問會顯示不出來 先用引用框代替)
class Window_CommandMenu_Sai90306 < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
# width : 窗口的宽
# commands : 命令字符串序列
#--------------------------------------------------------------------------
def initialize(width, commands)
# 由命令的个数计算出窗口的高
super(0, 0, width, 64)
@item_max = commands.size
@commands = commands
@column_max = commands.size
self.contents = Bitmap.new(width - 32, 64- 32)
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i, normal_color)
end
end
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
# color : 文字色
#--------------------------------------------------------------------------
def draw_item(index, color)
self.contents.font.color = color
self.contents.font.size = 16#設定文字大小
self.contents.font.bold = true#設定文字粗體
# 计算光标的宽
cursor_width = width / @column_max - 32
# 计算光标坐标
x = index % @column_max * (cursor_width + 32)
#y = @index / @column_max * 32 - self.oy
rect = Rect.new(x, 0, cursor_width - 8, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.draw_text(rect, @commands[index], 1)
end
#--------------------------------------------------------------------------
# ● 项目无效化
# index : 项目编号
#--------------------------------------------------------------------------
def disable_item(index)
draw_item(index, disabled_color)
end
end
和
class Scene_Menu_Sai90306
#--------------------------------------------------------------------------
# ● 初始化目標
# menu_index : 命令游標的初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● 主處理
#--------------------------------------------------------------------------
def main
#設定背景圖片開始
@back_map = Spriteset_Map.new#設定背景透明
# 製作命令視窗
s1 = "選項"
s2 = "選項測試"
s3 = "選項測試測試"
s4 = "選項"
s5 = "選項"
s6 = "選項測試測試測試"
s7 = "返回"
主選項 = [s1,s2,s3,s4,s5,s6,s7]
@SLG_選單寬度 = 640#640為選單寬度,可調整
@command_window = Window_CommandMenu_Sai90306.new(@SLG_選單寬度, 主選項)#250為選單寬度,可調整
#@command_window = Window_Command_Sai.new(250, [s5, s6, s7, s8, s9])#250為選單寬度,可調整
#@command_window.height = 32+32*$sai_row#設定選單行數為$sai_row行
@command_window.height = 32+32
@command_window.x = 0#設定x座標
@command_window.y = 480-64#設定y座標
@command_window.index = @menu_index
# 執行過渡
Graphics.transition
# 主循環
loop do
# 更新遊戲畫面
Graphics.update
# 更新輸入訊息
Input.update
# 更新畫面
update
# 如果切換畫面就中斷循環
if $scene != self
break
end
end
# 準備過渡
Graphics.freeze
# 釋放視窗所佔的記憶體空間
@back_map.dispose#釋放背景
@command_window.dispose
end
#--------------------------------------------------------------------------
# ● 更新畫面
#--------------------------------------------------------------------------
def update
# 更新視窗
@command_window.update
# 命令視窗被啟動的情況下: 取用 update_command
if @command_window.active
update_command
return
end
# 政務視窗被啟動的情況下: 取用 update_command1
if @command_window1.active
update_command1
return
end
# 軍事視窗被啟動的情況下: 取用 update_command2
if @command_window2.active
update_command2
return
end
# 人才視窗被啟動的情況下: 取用 update_command2
if @command_window3.active
update_command3
return
end
end
#--------------------------------------------------------------------------
# ● 更新畫面 (命令視窗被啟動的情況下)
#--------------------------------------------------------------------------
def update_command
# 按下 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)
# 同伴人數為 0、存檔、遊戲結束以外的場合
if $game_party.actors.size == 0 and @command_window.index < 4
# 演奏凍結 SE
$game_system.se_play($data_system.buzzer_se)
return
end
# 命令視窗的游標位置分支
case @command_window.index
when 0 #政務
@command_window.active = false
when 1 #軍事
@command_window.active = false
when 2 #人才
@command_window.active = false
when 3
when 4
when 5
end
return
end
end
end
|
|