Project1
标题:
求助,请让这个标题菜单支持鼠标,谢谢!
[打印本页]
作者:
美丽晨露
时间:
2013-4-25 16:31
标题:
求助,请让这个标题菜单支持鼠标,谢谢!
本帖最后由 美丽晨露 于 2013-4-25 17:44 编辑
可以的话,将游戏开始时弹出的错误去掉,谢谢。
不多说了,请让这个标题菜单支持鼠标,谢谢!
上范例:
多图片菜单.rar
(974.66 KB, 下载次数: 26)
2013-4-25 16:31 上传
点击文件名下载附件
PS:请不要吐槽范例内的图片,谢谢
作者:
789456qwe
时间:
2013-4-25 17:15
本帖最后由 789456qwe 于 2013-8-26 13:05 编辑
范例
里有说明
作者:
沙漠点灰
时间:
2013-4-25 17:37
只修改了lz要求的部分,没什么好说的,就是原代码太乱,如果这是lz写的脚本话,建议对照看看,相信会有一定收获。
还有就是能用引擎即时生成的东西尽量用代码实现,lz的范例中,完全可以。
“多图片标题菜单”代码:
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# 处理标题画面的类。
#==============================================================================
class Rect
def include?(ary)
return false if !ary.is_a?(Array) || ary.size != 2
ary[0] >= self.x && ary[1] >= self.y && ary[0] < self.x + self.width &&
ary[1] < self.y + self.height
end
end
class Scene_Title
TITLE_SIZE = 4
TITLE_RECT = Rect.new(0,280, 292, 32)
@@title_rect = []
TITLE_SIZE.times{|i|@@title_rect << TITLE_RECT.dup;@@title_rect[-1].y += TITLE_RECT.height*i}
def initialize(skip = false)
@skip = skip
end
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
# 战斗测试的情况下
if $BTEST
battle_test
return
end
# 载入数据库
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$data_mapnames = load_data("Data/MapInfos.rxdata")
$game_system = Game_System.new
@wait_count = 0
@index = 0
# 判定继续的有效性
# 存档文件一个也不存在的时候也调查
# 有効为 @continue_enabled 为 true、無効为 false
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
@continue_enabled = true
end
end
if @skip
acting(4)
else
start
end
# 停止演奏 ME、BGS
Audio.me_stop
Audio.bgs_stop
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
update
# 如果画面被切换就中断循环
if $scene != self
break
end
end
# 装备过渡
Graphics.freeze
5.times do |i|@pic[i].bitmap.dispose; @pic[i].dispose end
Quarcy::Cache.clear
end
#--------------------------------------------------------------------------
# ● 刷新鼠标
#--------------------------------------------------------------------------
def update_mouse
pos = Mouse.get_mouse_pos
@@title_rect.each_with_index{|rect, index|return refresh_index(index)if rect.include?(pos)}
end
#--------------------------------------------------------------------------
# ● 刷新光标
#--------------------------------------------------------------------------
def refresh_index(index=@index)
return if @index == index
@index = index
$game_system.se_play($data_system.cursor_se)
@pic[3].bitmap = loadbitmap("Graphics/Title/选项#{@index+1}")
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
(@wait_count -= 1;return) if @wait_count > 0
return if acting(@step)
update_mouse
return refresh_index((@index - 1)%TITLE_SIZE) if Input.repeat?(Input::UP) || Input.trigger?(Input::UP)
return refresh_index((@index + 1)%TITLE_SIZE) if Input.repeat?(Input::DOWN) || Input.trigger?(Input::DOWN)
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 命令窗口的光标位置的分支
case @index
when 0 # 新游戏
command_new_game
when 1 # 继续
command_continue
when 2 # 制作人员
$scene = Scene_Reference.new
when 3 # 退出
command_shutdown
end
end
end
#----------------------------------------------------------------------------
def start
@wait_count = 20
@step = 1
end
def acting(step)
case step
when 8
return false
when 1
@pic = Sprite.new
@pic.bitmap = loadbitmap("Graphics/Pictures/标题LOGO")
@pic.opacity = 0
@duration = 20
@step = 2
return true
when 2
if @duration > 0
d = @duration
@pic.opacity = (@pic.opacity * (d - 1) + 255) / d
@duration -= 1
else
@step = 3
@wait_count = 60
@duration = 20
end
return true
when 3
if @duration > 0
d = @duration
@pic.opacity = (@pic.opacity * (d - 1) + 0) / d
@duration -= 1
else
@step = 4
@wait_count = 25
end
return true
when 4
@pic.dispose if @pic !=nil
@wait_count = 20
@duration = 60
$game_system.bgm_play($data_system.title_bgm)
@pic = []
5.times do @pic << Sprite.new end
i = rand(3) + 1
@pic[0].bitmap = loadbitmap("Graphics/Title/背景#{i}")
@pic[1].bitmap = loadbitmap("Graphics/Title/LOGO")
actor = %w[莉德露一 莉德露二 莉德露三][rand(3)]
@pic[2].bitmap = loadbitmap("Graphics/Title/#{actor}")
if @continue_enabled
@index = 1
@pic[3].bitmap = loadbitmap("Graphics/Title/选项#{@index+1}")
else
@pic[3].bitmap = loadbitmap("Graphics/Title/选项1")
end
@pic[3].x = -15
@pic[4].bitmap = loadbitmap("Graphics/Title/66RPG")
@pic[4].y = 460
5.times do |i|@pic[i].opacity = 0 end
@step = 5
return true
when 5
if @duration > 40
d = @duration - 40
@pic[0].opacity = (@pic[0].opacity * (d - 1) + 255) / d
@pic[4].opacity = (@pic[3].opacity * (d - 1) + 255) / d
@duration -= 1
return true
elsif @duration > 25
d = @duration - 25
@pic[1].opacity = (@pic[1].opacity * (d - 1) + 255) / d
@pic[2].opacity = (@pic[2].opacity * (d - 1) + 255) / d
@duration -= 1
return true
elsif @duration > 0
d = @duration
@pic[3].opacity = (@pic[3].opacity * (d - 1) + 255) / d
@duration -= 1
return true
else
@step = 8
@wait_count = 3
end
return true
when 6
if @duration > 0
d = @duration
@pic[0].opacity = (@pic[0].opacity * (d - 1) + 0) / d
@duration -= 1
else
@step = 7
@duration = 20
@pic[0].x = 0
end
return true
when 7
if @duration > 0
d = @duration
@pic[0].opacity = (@pic[0].opacity * (d - 1) + 255) / d
@duration -= 1
else
@step = 8
end
else
return true
end
end
#----------------------------------------------------------------------------
#--------------------------------------------------------------------------
# ● 載入圖片并放置于緩存區
#--------------------------------------------------------------------------
def loadbitmap(path)
return Quarcy::Cache.loadbitmap(path)
end
end
class Scene_Reference
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
bg_sprite = Sprite.new()
bg_sprite.bitmap = Quarcy::Cache.loadbitmap("Graphics/Pictures/制作人员")
# 执行过渡
Graphics.transition(20, "Graphics/Transitions/标题过度.png")
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
if Input.trigger?(Input::C) or Input.trigger?(Input::B)
$game_system.se_play($data_system.decision_se)
$scene = Scene_Title.new(true)
end
# 如果画面被切换就中断循环
if $scene != self
break
end
end
bg_sprite.dispose()
# 准备过渡
Graphics.freeze
Quarcy::Cache.clear
end
end
复制代码
至于开头报错,lz难道忘了“紧插到Main前”这一句话了吗= =
load("#$Rmxp_Location/rbScript/require.rb")
这句改插到?Maiin前就行了
作者:
美丽晨露
时间:
2013-4-25 17:44
本帖最后由 美丽晨露 于 2013-4-25 18:15 编辑
沙漠点灰 发表于 2013-4-25 17:37
只修改了lz要求的部分,没什么好说的,就是原代码太乱,如果这是lz写的脚本话,建议对照看看,相信会有一定 ...
十分感谢您
代码并不是我写的啦,脚本盲不会写脚本的说
原来那个load("#$Rmxp_Location/rbScript/require.rb")
我插到了最前面了,所以会没有效果
@沙漠点灰
关于这个:还有就是能用引擎即时生成的东西尽量用代码实现
不好意思啊,那可以帮助我优化一下这个脚本吗?
感觉附带一些外部文件使用起来很不方便,可以吗?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1