Project1
标题: 自己的窗口脚本请教(标题不知道怎样更专业一点) [打印本页]
作者: 阮声悠悠 时间: 2019-3-6 14:28
标题: 自己的窗口脚本请教(标题不知道怎样更专业一点)
本帖最后由 阮声悠悠 于 2019-3-7 23:33 编辑
找到了一个更合适的解决方案,所以对我来说这张帖子的问题已经不重要了。
这是一个罗列道具的脚本。罗列的数组在88行
我希望窗口的第一行罗列物品ID为 1, 2, 3 的图标和名称
但是我只能描绘出数组的第一个,第二个和第三个不知道怎样才能描绘出来……
这是第一个想请教的……
然后,bitmap = RPG::Cache.icon($data_items[@data[index][0]].icon_name)
这句脚本是显示物品的图标,但我不知道怎样让这个图标变成灰色,或者说半透明(也就是未获得这个道具时候的状态)
这是第二个想请教的……
#$scene = Scene_xgqBhuoZhuoTuJian.new打开脚本
class Scene_xgqBhuoZhuoTuJian
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
screen = Spriteset_Map.new
# 生成窗口
@tujian_window = Window_BhuoZhuoTuJian.new
@tujian_window.z=1000
# 生成目标窗口 (设置为不可见・不活动)
@target_window = Window_Target.new
@target_window.visible = false
@target_window.active = false
@target_window.z=1896
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
screen.dispose
@tujian_window.dispose
@target_window.dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
# 刷新窗口
@tujian_window.update
@target_window.update
# 图鉴窗口被激活的情况下: 调用 update_tujian
if @tujian_window.active
update_tujian
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (特技窗口被激活的情况下)
#--------------------------------------------------------------------------
def update_tujian
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换到地图
$scene = Scene_Map.new
return
end
end
end
class Window_BhuoZhuoTuJian < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 480)
@column_max = 1
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = [
[ 1, 2, 3, 0, 0],#第一行出现的物品ID,如有有0就不出现
[ 4, 5, 6, 0, 0],
[ 7, 8, 9, 0, 0],
[ 58, 59, 0, 0, 0],
[ 115, 0, 0, 0, 0],
[ 236, 237, 106, 107, 0]
]
# 如果项目数不是 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)
skill = @data[index]
self.contents.font.color = normal_color
x = 4
y = index * 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($data_items[@data[index][0]].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, 204, 32, $data_items[@data[index][0]].name, 0)
end
end
#$scene = Scene_xgqBhuoZhuoTuJian.new打开脚本
class Scene_xgqBhuoZhuoTuJian
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
screen = Spriteset_Map.new
# 生成窗口
@tujian_window = Window_BhuoZhuoTuJian.new
@tujian_window.z=1000
# 生成目标窗口 (设置为不可见・不活动)
@target_window = Window_Target.new
@target_window.visible = false
@target_window.active = false
@target_window.z=1896
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
screen.dispose
@tujian_window.dispose
@target_window.dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
# 刷新窗口
@tujian_window.update
@target_window.update
# 图鉴窗口被激活的情况下: 调用 update_tujian
if @tujian_window.active
update_tujian
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (特技窗口被激活的情况下)
#--------------------------------------------------------------------------
def update_tujian
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换到地图
$scene = Scene_Map.new
return
end
end
end
class Window_BhuoZhuoTuJian < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 480)
@column_max = 1
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = [
[ 1, 2, 3, 0, 0],#第一行出现的物品ID,如有有0就不出现
[ 4, 5, 6, 0, 0],
[ 7, 8, 9, 0, 0],
[ 58, 59, 0, 0, 0],
[ 115, 0, 0, 0, 0],
[ 236, 237, 106, 107, 0]
]
# 如果项目数不是 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)
skill = @data[index]
self.contents.font.color = normal_color
x = 4
y = index * 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($data_items[@data[index][0]].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, 204, 32, $data_items[@data[index][0]].name, 0)
end
end
作者: ppspssss 时间: 2019-3-6 14:42
本帖最后由 ppspssss 于 2019-3-6 14:44 编辑
不是[index][0] 那个 0改了1或以上就是第几个了么, 至于透明應該是改opacity
还有我QQ為什么被你突然拉黑了又不說原因, 这个問題困扰我很多天
作者: 阮声悠悠 时间: 2019-3-6 15:13
QQ的话只有一个好友感觉怪怪的,就删除了,看起来整洁一点。
话说,删除QQ还要征求对方同意?再加上你和我没有任何交情
至于0改成1就能解决问题……
我有个不成熟的小建议,你再读一下这张帖子,重新寻找帖子中的疑问。
作者: KB.Driver 时间: 2019-3-6 15:50
XP的脚本结构本来就不太好,再不认真研究就自己瞎搞的话谁也帮不了你。
把你的窗口重新写了一遍。
class Window_BhuoZhuoTuJian < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 480)
@column_max = 3 ##
self.index = 0
init_data
refresh
end
def init_data
@data = [
1, 2, 3,#第一行出现的物品ID,如有有0就不出现
4, 5, 6,
7, 8, 9,
58, 59, 0,
115, 0, 0,
236, 237, 106, 107, 0
]
@item_max = @data.size
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents
self.contents.clear
else
self.contents = Bitmap.new(width - 32, @item_max * 32)
end
@item_max.times{|i| draw_item(i)}
end
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
#--------------------------------------------------------------------------
def draw_item(index)
x = index % @column_max * (self.cursor_rect.width + 32)
y = index / @column_max * 32
if (id = @data[index]) > 0
bitmap = RPG::Cache.icon($data_items[id].icon_name)
self.contents.blt(x, y + 4, bitmap, bitmap.rect)
self.contents.draw_text(x + 28, y, 204, 32, $data_items[id].name)
end
end
end
class Window_BhuoZhuoTuJian < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 480)
@column_max = 3 ##
self.index = 0
init_data
refresh
end
def init_data
@data = [
1, 2, 3,#第一行出现的物品ID,如有有0就不出现
4, 5, 6,
7, 8, 9,
58, 59, 0,
115, 0, 0,
236, 237, 106, 107, 0
]
@item_max = @data.size
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents
self.contents.clear
else
self.contents = Bitmap.new(width - 32, @item_max * 32)
end
@item_max.times{|i| draw_item(i)}
end
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
#--------------------------------------------------------------------------
def draw_item(index)
x = index % @column_max * (self.cursor_rect.width + 32)
y = index / @column_max * 32
if (id = @data[index]) > 0
bitmap = RPG::Cache.icon($data_items[id].icon_name)
self.contents.blt(x, y + 4, bitmap, bitmap.rect)
self.contents.draw_text(x + 28, y, 204, 32, $data_items[id].name)
end
end
end
提醒你几点,想一下下面几个问题
@column_max是什么,@data数组套数组能改变列数吗?
self.contents是什么,有必要每次refresh生成新对象吗?
作者: 阮声悠悠 时间: 2019-3-6 16:13
啊哈哈哈,抱歉,学习了,我现在对脚本还在依葫芦画瓢的阶段,我正在尝试模仿着写一些简单的脚本。
这样修改的话是一行有3列。
我想要第一行光标包含了:回复剂、超回复剂、完全恢复剂,(配图最后一行的效果)
然后第二行第三行又不一样,例如配图,第四行和第五行的出现的物品个数不同,最多一行只会出现4个
作者: 阮声悠悠 时间: 2019-3-6 16:37
貌似可以一行出现不同个数,因为实际上还是一列……
- #$scene = Scene_xgqBhuoZhuoTuJian.new打开脚本
-
-
- class Scene_xgqBhuoZhuoTuJian
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- screen = Spriteset_Map.new
- # 生成窗口
- @tujian_window = Window_BhuoZhuoTuJian.new
- @tujian_window.z=1000
- # 生成目标窗口 (设置为不可见・不活动)
- @target_window = Window_Target.new
- @target_window.visible = false
- @target_window.active = false
- @target_window.z=1896
- # 执行过渡
- Graphics.transition
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果画面切换的话就中断循环
- if $scene != self
- break
- end
- end
- # 准备过渡
- Graphics.freeze
- # 释放窗口
- screen.dispose
- @tujian_window.dispose
- @target_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新窗口
- @tujian_window.update
- @target_window.update
- # 图鉴窗口被激活的情况下: 调用 update_tujian
- if @tujian_window.active
- update_tujian
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (特技窗口被激活的情况下)
- #--------------------------------------------------------------------------
- def update_tujian
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 切换到地图
- $scene = Scene_Map.new
- return
- end
- end
- end
-
-
-
- class Window_BhuoZhuoTuJian < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 640, 480)
- @column_max = 1
- refresh
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- @data = [
- [ 1, 2, 3, 0, 0],#第一行出现的物品ID,如有有0就不出现
- [ 4, 5, 6, 0, 0],
- [ 7, 8, 9, 0, 0],
- [ 58, 59, 0, 0, 0],
- [ 115, 0, 0, 0, 0],
- [ 236, 237, 106, 107, 0],
- [ 789, 790, 791, 792, 0]
-
- ]
- # 如果项目数不是 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)
- draw_itemer(i)
- draw_itemsan(i)
- draw_itemsi(i)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- #--------------------------------------------------------------------------
- def draw_item(index)
- skill = @data[index]
- x = 4
- y = index * 32
- bitmap = RPG::Cache.icon($data_items[@data[index][0]].icon_name)
- self.contents.blt(x, y + 4, bitmap, bitmap.rect)
- self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][0]].name, 0)
- end
- def draw_itemer(index)
- if @data[index][1] != 0
- skill = @data[index]
- x = 152
- y = index * 32
- bitmap = RPG::Cache.icon($data_items[@data[index][1]].icon_name)
- self.contents.blt(x, y + 4, bitmap, bitmap.rect)
- self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][1]].name, 0)
- end
- end
- def draw_itemsan(index)
- if @data[index][2] != 0
- skill = @data[index]
- x = 304
- y = index * 32
- bitmap = RPG::Cache.icon($data_items[@data[index][2]].icon_name)
- self.contents.blt(x, y + 4, bitmap, bitmap.rect)
- self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][2]].name, 0)
- end
- end
- def draw_itemsi(index)
- if @data[index][3] != 0
- skill = @data[index]
- x = 462
- y = index * 32
- bitmap = RPG::Cache.icon($data_items[@data[index][3]].icon_name)
- self.contents.blt(x, y + 4, bitmap, bitmap.rect)
- self.contents.draw_text(x + 28, y, 204, 32, $data_items[@data[index][3]].name, 0)
- end
- end
- end
复制代码
作者: 灯笼菜刀王 时间: 2019-3-6 19:14
def update_cursor_rect
if @data[self.index][3] != 0
self.cursor_rect.set(x,y,width,height)
elsif @data[self.index][2] != 0
self.cursor_rect.set(x,y,width,height)
elsif @data[self.index][1] != 0
self.cursor_rect.set(x,y,width,height)
else
self.cursor_rect.set(x,y,width,height)
end
end
这里也根据道具数量手动画吧XD
作者: KB.Driver 时间: 2019-3-6 19:21
说实在的,弄这么麻烦还不如不显示光标,输入只用来做上下翻页用(
作者: 融血 时间: 2019-3-7 23:27
参考Window_Item,里面@column_max就是列数,更改这个值就可以了
作者: 融血 时间: 2019-3-7 23:38
另外你想要的是不是大概就是这种效果?
作者: 融血 时间: 2019-3-7 23:38
本帖最后由 融血 于 2019-3-7 23:43 编辑
看错了,抱歉
作者: 融血 时间: 2019-3-8 00:12
光标的刷新和移动都可以在Window_Selectable里设置,你可以复制这个脚本然后重命名类的名字,之后按照需要改就行了
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |