Project1
标题:
关于天圣的AVG范例CG系统脚本
[打印本页]
作者:
zxlxp2006
时间:
2013-2-15 16:52
标题:
关于天圣的AVG范例CG系统脚本
本帖最后由 zxlxp2006 于 2013-2-15 18:28 编辑
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
$mouse_x, $mouse_y = Mouse.get_mouse_pos #获得鼠标的即时坐标
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换到菜单画面
$scene = Scene_Title.new
return
end
#
#【重点注意】关于鼠标的刷新。其实原理就是判断鼠标是否落在缩略图上。
#如果落在上面了,则给变量赋值表示选中了某CG。否则将变量清零。
#以CG1为例,上面设置过X坐标100,Y坐标40(左上角原点坐标)。
#宽高分别是120和90(按你自己做的缩略图大小)。
#所以,CG左上角在(100,40)处,右上角在(220,40)处,左下角在(100,130)处,
#右下角在(220,130)处。(还搞不清的自己画个长方形就知道怎么回事了)
#所以鼠标的X坐标如果在100~220之间同时Y坐标在40~130之间,
#即表示鼠标移动到了这张缩略图上。
if $mouse_x <= 220 and $mouse_x >= 100 and $mouse_y <= 130 and $mouse_y >= 40
if $game_party.item_number(1) > 0 #CG已经获得时才进行判定
if $game_variables[3] != 1 #如果现在还没选中该CG的话
$game_system.se_play($data_system.cursor_se)
$game_variables[3] = 1 #当前选定CG1
@cg_window.refresh #刷新一下CG窗口,让原本半透明的CG正回来
end
end
elsif $mouse_x <= 370 and $mouse_x >= 250 and $mouse_y <= 130 and $mouse_y >= 40
if $game_party.item_number(2) > 0 #CG2已经获得时才进行判定
if $game_variables[3] != 2 #如果现在还没选中该CG的话
$game_system.se_play($data_system.cursor_se)
$game_variables[3] = 2 #当前选定CG2
@cg_window.refresh
end
end #这是第二张CG的判定范例。需要更多请用elsif继续接下去。
elsif $mouse_x <= 520 and $mouse_x >= 400 and $mouse_y <= 130 and $mouse_y >= 40
if $game_party.item_number(3) > 0 #CG2已经获得时才进行判定
if $game_variables[3] != 3 #如果现在还没选中该CG的话
$game_system.se_play($data_system.cursor_se)
$game_variables[3] = 3 #当前选定CG2
@cg_window.refresh
end
end
else
$game_variables[3] = 0
@cg_window.refresh
end
if Input.trigger?(Input::C)
if $game_variables[3] != 0 #有CG被选中的时候
$game_system.se_play($data_system.decision_se)
$game_map.setup(2) #移动到2号地图。(地图ID在新建地图可看到)编号自己能改。
$game_player.moveto(0,0)
$game_player.refresh
$game_map.autoplay
$game_map.update
$scene = Scene_Map.new
#接下来显示出CG或者制作回想之类的内容就都是那张地图上的事情了。
#因为3号变量已经被赋值,所以直接利用条件分歧显示不同图片即可。
end
end
end
end
复制代码
=begin
★修改方面的罗嗦★
素材替换和排版参见Scene_Menu,这个就不说了。
这系统其实用起来原理很简单,自定义的部分也多,当然最麻烦的也在于此。
脚本里你需要修改的大部分只是数字,我会尽可能详细地解释,也欢迎repo使用中
出现的问题。
=end
class Window_CG < Window_Base
#--------------------------------------------------------------------------
# ● 初始化窗口
#--------------------------------------------------------------------------
def initialize
super(-16, -16, 656, 496) #去掉因为边框而导致的坐标误差
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
#从这里开始进入缩略图出现与否的判定。做好教程里提到的『三步骤』之后,
#系统已经记录了你继承的物品数据。接下来就是直接用其判定。
#注意3号变量被用来记录当前选定CG的编号。
#请看下面的例子。
#=========================================================
if $game_party.item_number(1) > 0 #1号物品(CG1)如果已经获得的话
bitmap=Bitmap.new("Graphics/pictures/CG1_s") #显示CG1的缩略图
src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
if $game_variables[3] == 1
self.contents.blt(100, 40, bitmap, src_rect,255)
#前两个数字是坐标可自定义。最后一个数字是判定当该CG被选中时透明度是正常的。
else #否则透明度降低表示尚未被选中。
self.contents.blt(100, 40, bitmap, src_rect,155)
end
end
#=========================================================
#这是CG2的设置,改几个小地方即可
if $game_party.item_number(2) > 0 #这里是对应的2号物品
bitmap=Bitmap.new("Graphics/pictures/CG2_s") #显示CG2的缩略图
src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
if $game_variables[3] == 2 #选中CG变量改为2
self.contents.blt(250, 40, bitmap, src_rect,255) #坐标……
else
self.contents.blt(250, 40, bitmap, src_rect,155)
end
#=========================================================
#这是CG2的设置,改几个小地方即可
if $game_party.item_number(3) > 0 #这里是对应的2号物品
bitmap=Bitmap.new("Graphics/pictures/CG3_s") #显示CG2的缩略图
src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
if $game_variables[3] == 3 #选中CG变量改为2
self.contents.blt(400, 40, bitmap, src_rect,255) #坐标……
else
self.contents.blt(400, 40, bitmap, src_rect,155)
end
#=========================================================
#以此类推,做好你的CG3、CG4……这样基础排版就已经完成了。
#没有得到的CG,因为物品数为0,所以不会显示出来。底图上可以画个空框啥的……
end
end
end
复制代码
我是一个真·脚本白痴……
我照着注释改的还是改错了……系统提示“Ocorreu um erro em SyntaxError, durante operação de script(在脚本运行中出现了错误的语法)”。
完全两眼一抹黑……求教……
感激不尽,呃,可以的话请尽量说得通俗易懂些?、
另外有涉及的一段脚本,CG系统是采用把CG做成物品的形式,增加一个“CG1”以后输入一段脚本
“file = File.open("Save/CG.rxdata", "wb")
Marshal.dump($game_party,file)
file.close”
范例本体已传百度网盘,
请戳
作者:
美丽晨露
时间:
2013-2-15 17:03
楼主能提供一下那个范例吗?
我不知道再哪下手改呢。
作者:
美丽晨露
时间:
2013-2-15 18:07
本帖最后由 美丽晨露 于 2013-2-15 18:08 编辑
修改好了
可以显示第3张CG
没有问题
1as.png
(398.78 KB, 下载次数: 4)
下载附件
保存到相册
2013-2-15 18:06 上传
附上脚本:
=begin
★修改方面的罗嗦★
素材替换和排版参见Scene_Menu,这个就不说了。
这系统其实用起来原理很简单,自定义的部分也多,当然最麻烦的也在于此。
脚本里你需要修改的大部分只是数字,我会尽可能详细地解释,也欢迎repo使用中
出现的问题。
=end
class Window_CG < Window_Base
#--------------------------------------------------------------------------
# ● 初始化窗口
#--------------------------------------------------------------------------
def initialize
super(-16, -16, 656, 496) #去掉因为边框而导致的坐标误差
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
#从这里开始进入缩略图出现与否的判定。做好教程里提到的『三步骤』之后,
#系统已经记录了你继承的物品数据。接下来就是直接用其判定。
#注意3号变量被用来记录当前选定CG的编号。
#请看下面的例子。
#=========================================================
if $game_party.item_number(1) > 0 #1号物品(CG1)如果已经获得的话
bitmap=Bitmap.new("Graphics/pictures/CG_s") #显示CG1的缩略图
src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
if $game_variables[3] == 1
self.contents.blt(100, 40, bitmap, src_rect,255)
#前两个数字是坐标可自定义。最后一个数字是判定当该CG被选中时透明度是正常的。
else #否则透明度降低表示尚未被选中。
self.contents.blt(100, 40, bitmap, src_rect,155)
end
end
#=========================================================
#这是CG2的设置,改几个小地方即可
if $game_party.item_number(2) > 0 #这里是对应的2号物品
bitmap=Bitmap.new("Graphics/pictures/CG2_s") #显示CG2的缩略图
src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
if $game_variables[3] == 2 #选中CG变量改为2
self.contents.blt(300, 40, bitmap, src_rect,255) #坐标……
else
self.contents.blt(300, 40, bitmap, src_rect,155)
end
end
#=========================================================
#以此类推,做好你的CG3、CG4……这样基础排版就已经完成了。
#没有得到的CG,因为物品数为0,所以不会显示出来。底图上可以画个空框啥的……
####3号
if $game_party.item_number(3) > 0 #这里是对应的3号物品
bitmap=Bitmap.new("Graphics/pictures/CG3_s") #显示CG2的缩略图
src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
if $game_variables[3] == 3 #选中CG变量改为3
self.contents.blt(500, 40, bitmap, src_rect,255) #坐标……
else
self.contents.blt(500, 40, bitmap, src_rect,155)
end
end
##########
end
end
#==============================================================================
# ■ Scene_CG
#------------------------------------------------------------------------------
# 处理CG鉴赏画面的类。
#==============================================================================
class Scene_CG
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
$game_variables[3] = 0 #初始化变量
@cg_window = Window_CG.new
@back = Sprite.new
@back.bitmap = RPG::Cache.picture("ui_log")
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面被切换的话就中断循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗口
# @command_window.dispose
@cg_window.dispose
@back.dispose
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
$mouse_x, $mouse_y = Mouse.get_mouse_pos #获得鼠标的即时坐标
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 切换到菜单画面
$scene = Scene_Title.new
return
end
#
#【重点注意】关于鼠标的刷新。其实原理就是判断鼠标是否落在缩略图上。
#如果落在上面了,则给变量赋值表示选中了某CG。否则将变量清零。
#以CG1为例,上面设置过X坐标100,Y坐标40(左上角原点坐标)。
#宽高分别是120和90(按你自己做的缩略图大小)。
#所以,CG左上角在(100,40)处,右上角在(220,40)处,左下角在(100,130)处,
#右下角在(220,130)处。(还搞不清的自己画个长方形就知道怎么回事了)
#所以鼠标的X坐标如果在100~220之间同时Y坐标在40~130之间,
#即表示鼠标移动到了这张缩略图上。
if $mouse_x <= 220 and $mouse_x >= 100 and $mouse_y <= 130 and $mouse_y >= 40
if $game_party.item_number(1) > 0 #CG已经获得时才进行判定
if $game_variables[3] != 1 #如果现在还没选中该CG的话
$game_system.se_play($data_system.cursor_se)
$game_variables[3] = 1 #当前选定CG1
@cg_window.refresh #刷新一下CG窗口,让原本半透明的CG正回来
end
end
elsif $mouse_x <= 420 and $mouse_x >= 300 and $mouse_y <= 130 and $mouse_y >= 40
if $game_party.item_number(2) > 0 #CG2已经获得时才进行判定
if $game_variables[3] != 2 #如果现在还没选中该CG的话
$game_system.se_play($data_system.cursor_se)
$game_variables[3] = 2 #当前选定CG2
@cg_window.refresh
end
end #这是第二张CG的判定范例。需要更多请用elsif继续接下去。
#
elsif $mouse_x <= 620 and $mouse_x >= 500 and $mouse_y <= 130 and $mouse_y >= 40
if $game_party.item_number(3) > 0 #CG3已经获得时才进行判定
if $game_variables[3] != 3 #如果现在还没选中该CG的话
$game_system.se_play($data_system.cursor_se)
$game_variables[3] = 3 #当前选定CG3
@cg_window.refresh
end
end #这是第二张CG的判定范例。需要更多请用elsif继续接下去。
#
else
$game_variables[3] = 0
@cg_window.refresh
end
if Input.trigger?(Input::C)
if $game_variables[3] != 0 #有CG被选中的时候
$game_system.se_play($data_system.decision_se)
$game_map.setup(2) #移动到2号地图。(地图ID在新建地图可看到)编号自己能改。
$game_player.moveto(0,0)
$game_player.refresh
$game_map.autoplay
$game_map.update
$scene = Scene_Map.new
#接下来显示出CG或者制作回想之类的内容就都是那张地图上的事情了。
#因为3号变量已经被赋值,所以直接利用条件分歧显示不同图片即可。
end
end
end
end
复制代码
楼主看看跟你之前设置的地方,是哪里你弄错了?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1