查看: 5133|回复: 13

[已经解决] 图片标题修改求思路求方法......

[复制链接]
梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
回帖
10960

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

发表于 2013-9-20 23:29:29 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 美丽晨露 于 2013-9-21 15:14 编辑

以下是范例:
多图片标题.zip (987.04 KB, 下载次数: 99)

我想讲图片标题做出以下效果······
1.标题背景等待一段帧数后会切换到另一张,以渐变的效果切换······
2.人物素材显示在右方,两个人物随机出现一个。
且会在标题中眨眼(切换图片效果)······
3.点击第一、第二、第三选项时,等待,人物素材变为“名称3”,
执行下面的事情。


已经自行修改了一番,但是第三项依旧无法实现······
求脚本大师帮助。

[pre lang="ruby" line="1"]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================

#==============================================================================
# ■ 图片标题菜单1.0
# Scene_Title
#------------------------------------------------------------------------------
# 作者:chaochao
# http://zhuchao.go1.icpcn.com
#==============================================================================
class Scene_Title
  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")
    $game_system = Game_System.new
    # 生成标题图形
    @sprite = [Sprite.new]
    for i in 0..8
      @sprite = Sprite.new
      @sprite.opacity = 0
    end
    # 生成标题图形
    @titleback = Sprite.new
    @titleback.bitmap = Bitmap.new(640, 480)
    #生成标题变换图形
    @titlesp = Sprite.new
    @titlespbmp = []
    for j in 0...3
      @titlespbmp[j] = Bitmap.new("Graphics/Titles/标题" + (j + 1).to_s)
    end
    #
    @titlesp.opacity = 127
    @titlesp.bitmap = @titlespbmp[0]
    @bmpsequence = 0
    @bmpopacity = 255
    @bmpdirect = 1
    @titleback.bitmap.fill_rect(0, 0, 640, 480, Color.new(255, 255, 255, 255))
    #
    # 随机人物
    randpeople = rand(2)
   #生成人物
    @lidelu = Sprite.new
    @lidelubmp = []
    for j in 0...3
      case randpeople
      when 0
      @lidelubmp[j] = Bitmap.new("Graphics/Titles/莉德露" + (j + 1).to_s)
      when 1
      @lidelubmp[j] = Bitmap.new("Graphics/Titles/巫女" + (j + 1).to_s)
      end
    end
    @lidelu.bitmap = @lidelubmp[0]
    @lidelu.x = 300
    @lidelu.y = 120
    @lidelu.z = 9999
    @lidelublinkcount = 0
    ###
    @sprite[0].bitmap = RPG::Cache.title($data_system.title_name)
    @sprite[0].opacity = 0
    @sprite[0].z =9999
    #开始游戏的图片
    @sprite[1].bitmap = Bitmap.new("Graphics/Titles/开始1.png")
    @sprite[2].bitmap = Bitmap.new("Graphics/Titles/开始2.png")
    @sprite[1].z =9999
    @sprite[2].z =9999
    #继续游戏的图片
    @sprite[3].bitmap = Bitmap.new("Graphics/Titles/继续1.png")
    @sprite[4].bitmap = Bitmap.new("Graphics/Titles/继续2.png")
    @sprite[3].z =9999
    @sprite[4].z =9999
    #结束游戏的图片
    @sprite[5].bitmap = Bitmap.new("Graphics/Titles/人物1.png")
    @sprite[6].bitmap = Bitmap.new("Graphics/Titles/人物2.png")
    @sprite[5].z =9999
    @sprite[6].z =9999
    #第四项的图片
    @sprite[7].bitmap = Bitmap.new("Graphics/Titles/退出1.png")
    @sprite[8].bitmap = Bitmap.new("Graphics/Titles/退出2.png")
    @sprite[7].z =9999
    @sprite[8].z =9999
    #图片位置
    for i in 1..8
      x=135
      y=(i+1)/2*35+240
      @sprite.x =x
      @sprite.y =y
    end
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    if @continue_enabled
      @command_index = 1
    else
      @command_index = 0
      @sprite[3].tone = Tone.new(0, 0, 0, 255)
      @sprite[4].tone = Tone.new(0, 0, 0, 255)
    end
    $game_system.bgm_play($data_system.title_bgm)
    Audio.me_stop
    Audio.bgs_stop
    Graphics.transition
    loop do
      Graphics.update
      #淡出背景圖形
      if @sprite[0].opacity <= 255
        @sprite[0].opacity += 15
      end
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    # 釋放圖形
    @titleback.bitmap.dispose
    @titleback.dispose
    for j in 0...3
      @titlespbmp[j].dispose
    end
    @lidelu.dispose
    for j in 0...3
      @lidelubmp[j].dispose
    end
    @titlesp.dispose
    for i in 0..8
      @sprite.bitmap.dispose
      @sprite.dispose
    end
  end
  def update
  chaochaocommandchaochao
  if Input.trigger?(Input::C)
    case @command_index  
      when 0
        command_new_game
      when 1
        command_continue
      when 2
        
      when 3
        command_shutdown
      end
    end
   # 更新背景图片
    if @bmpdirect > 0
      @bmpopacity += 10
      if @bmpopacity >= 1200
        @bmpdirect = -1
      end
    else
      @bmpopacity -= 10
      if @bmpopacity <= 0
        @bmpdirect = 1
        # 更换人物和背景图片
        @bmpsequence = (@bmpsequence + 1) % 3
        @titlesp.bitmap = @titlespbmp[@bmpsequence]
      end
    end
    #更换图片操作
    @titlesp.opacity = (@bmpopacity > 255 ? 127 : @bmpopacity / 2)
    @lidelublinkcount = (@lidelublinkcount + 1) % 60
    @lidelu.bitmap = @lidelubmp[@lidelublinkcount >= 52 ? 1 : 0]
  end
  #
  def chaochaocommandchaochao
    if Input.trigger?(Input::UP)
      @command_index -= 1
      if @command_index < 0
        @command_index = 3
      end
      $game_system.se_play($data_system.cursor_se)
    end
    if Input.trigger?(Input::DOWN)
      @command_index += 1
      if @command_index > 3
        @command_index = 0
      end
      $game_system.se_play($data_system.cursor_se)
    end
    case @command_index
   when 0
      if @sprite[1].opacity >= 0
        @sprite[1].opacity -= 30
      end
      if @sprite[2].opacity <= 240
        @sprite[2].opacity += 30
      end
      if @sprite[3].opacity <= 210
        @sprite[3].opacity += 30
      end
      if @sprite[4].opacity >= 0
        @sprite[4].opacity -= 30
      end
      if @sprite[5].opacity <= 210
        @sprite[5].opacity += 30
      end
      if @sprite[6].opacity >= 0
        @sprite[6].opacity -= 30
      end
      if @sprite[7].opacity <= 210
        @sprite[7].opacity += 30
      end
      if @sprite[8].opacity >= 0
        @sprite[8].opacity -= 30
      end
    when 1
      if @sprite[1].opacity <= 210
        @sprite[1].opacity += 30
      end
      if @sprite[2].opacity >= 0
        @sprite[2].opacity -= 30
      end
      if @sprite[3].opacity >= 0
        @sprite[3].opacity -= 30
      end
      if @sprite[4].opacity <= 240
        @sprite[4].opacity += 30
      end
      if @sprite[5].opacity <= 210
        @sprite[5].opacity += 30
      end
      if @sprite[6].opacity >= 0
        @sprite[6].opacity -= 30
      end
      if @sprite[7].opacity <= 210
        @sprite[7].opacity += 30
      end
      if @sprite[8].opacity >= 0
        @sprite[8].opacity -= 30
      end
    when 2
      if @sprite[1].opacity <= 210
        @sprite[1].opacity += 30
      end
      if @sprite[2].opacity >= 0
        @sprite[2].opacity -= 30
      end
      if @sprite[3].opacity <= 210
        @sprite[3].opacity += 30
      end
      if @sprite[4].opacity >= 0
        @sprite[4].opacity -= 30
      end
      if @sprite[5].opacity >= 0
        @sprite[5].opacity -= 30
      end
      if @sprite[6].opacity <= 240
        @sprite[6].opacity += 30
      end
      if @sprite[7].opacity <= 210
        @sprite[7].opacity += 30
      end
      if @sprite[8].opacity >= 0
        @sprite[8].opacity -= 30
      end
      when 3
      if @sprite[1].opacity <= 210
        @sprite[1].opacity += 30
      end
      if @sprite[2].opacity >= 0
        @sprite[2].opacity -= 30
      end
      if @sprite[3].opacity <= 210
        @sprite[3].opacity += 30
      end
      if @sprite[4].opacity >= 0
        @sprite[4].opacity -= 30
      end
      if @sprite[7].opacity >= 0
        @sprite[7].opacity -= 30
      end
      if @sprite[8].opacity <= 240
        @sprite[8].opacity += 30
      end
      if @sprite[5].opacity <= 210
        @sprite[5].opacity += 30
      end
      if @sprite[6].opacity >= 0
        @sprite[6].opacity -= 30
      end
    end
  end
end[/pre]
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

梦石
0
星屑
3905
在线时间
1972 小时
注册时间
2013-1-3
回帖
9146
发表于 2013-9-21 10:44:05 | 显示全部楼层

这个可以用事件标题制作

本帖最后由 紫英晓狼1130 于 2013-9-21 10:46 编辑

我现在不在电脑前…
晨露的这个范例用到脚本吗?
一定要使用脚本吗?

点评

是的。  发表于 2013-9-21 10:45
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复

使用道具 举报

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2013-9-21 13:57:37 | 显示全部楼层
本帖最后由 kuerlulu 于 2013-9-21 13:59 编辑

来看看这个换图脚本= =|||大雾,无视文件名
  1.     @i = 0
  2.     @sprite = Sprite.new
  3.     @sprite.bitmap = RPG::Cache.title("虐杀原形循环/" + @i.to_s)
  4.     loop do
  5.       @sprite.bitmap = RPG::Cache.title("虐杀原形循环/" + @i.to_s)
  6.       Graphics.update
  7.       # 每300帧清缓存,每1807帧循环到第一帧。
  8.       if @i % 300 == 0
  9.         RPG::Cache.clear
  10.       end
  11.       if @i % 1807 == 0
  12.         @i = 0
  13.       end
  14. #中断循环的代码没写进去所以它会一直在放hahaha...XD
  15.     end
  16. #方法2是把loop do换成for in。。XD我连dispose都没写
复制代码
但是这个脚本的播放速度是1帧1图,要按时间切图需要把判定重新改一下"if BALABALABALA"
加上过渡效果就(参见RGSS内部模块)
  1. @sprite.bitmap = RPG::Cache.title("虐杀原形循环/" + @i.to_s)
  2. loop do
  3.   Graphics.freeze
  4.   if Balabalabala..
  5.     @sprite.bitmap = RPG::Cache.title("虐杀原形循环/" + @i.to_s)
  6.   end
  7.   Graphics.transition([duration[, filename[, vague]]])
  8.   Graphics.update
  9.   BALABALABALA...
  10. end
复制代码

点评

看到里面各种XD我就觉得你的节操降低了  发表于 2013-9-21 18:21

评分

参与人数 1星屑 +30 收起 理由
美丽晨露 + 30 感谢提供思路

查看全部评分


  -fk: -azogi:
回复

使用道具 举报

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
回帖
10960

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

 楼主| 发表于 2013-9-21 15:15:49 | 显示全部楼层
主楼更新了内容,请各位高人帮帮忙
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复

使用道具 举报

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
回帖
1223
发表于 2013-9-21 17:16:23 | 显示全部楼层
本帖最后由 恋′挂机 于 2013-9-21 17:17 编辑

图的切换:
直接调用三张图,使用rand方式随机让一张图的opacity为255,其余为0

上方加一句 @Time = 0
在刷新中
@Time += 1
if @time > 99
#让当前显示的图慢慢消失(减透明度)
#同时加另一张图的透明度,实现渐变效果
for i in 0...21
@picture1.opacity -= 10
@picture2.opacity += 10
if i == 20
@picture1.opacity = 0
@picture1.opacity = 255
end
end
end


补充随机显示图片
@pictrues_array = []
for i in 0...5
@pictrues_array = sprite.new
@pictrues_array.bitmap = Bitmap.new("picture#{i + 1}")
@pictrues_array.x = 0#X坐标
@pictrues_array.y = 0#Y坐标
@pictrues_array.opacity = 0#不用管,为随机出现图片做准备
end
#图片名就是  picture1  picture2 picture3 等等
@pictrues_array[rand(5) + 1].opacity = 255#这就是随机一个数并带入数组让数组中的某张图透明度为255


随机显示人物也是那样


等待

for i in 0...100#相当于帧数,即等待时间长短
Graphics.update
end  

评分

参与人数 1星屑 +30 收起 理由
美丽晨露 + 30 感谢方法提醒

查看全部评分

回复

使用道具 举报

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
回帖
10960

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

 楼主| 发表于 2013-9-21 17:53:18 | 显示全部楼层
恋′挂机 发表于 2013-9-21 17:16
图的切换:
直接调用三张图,使用rand方式随机让一张图的opacity为255,其余为0

嗯,感谢你的方法·······
能不能帮助我将第三项的效果在主楼的脚本中实现呢?
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复

使用道具 举报

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
回帖
1223
发表于 2013-9-21 19:28:00 | 显示全部楼层
美丽晨露 发表于 2013-9-21 17:53
嗯,感谢你的方法·······
能不能帮助我将第三项的效果在主楼的脚本中实现呢? ...

第三项没看懂,不知道是不是临时改图片?也就是本来调用的是A图片,现在临时换为B图片,如果是的话,就不能在main(主处理)中调用图片了(要放在update里,添加限制条件不会无限调用)。

在update里:
  1. #使用方法直接@update_picture = true或者改为$号下方也对应改,全局使用
  2. if @array == nil or @update_picture == true
  3. if @array != nil#如果数组已经存在或者说图片已经存在
  4. for i in 1..5
  5. @array[i].bitmap.dispose
  6. @array[i].dispose
  7. end
  8. @array = []#然后重新读图
  9. for i in 1..5
  10. @array[i] = Sprite.new
  11. #名字可以改变,也可以分歧辅助实变量可以读取到不只一张图片
  12. @array[i].bitmap = Bitmap.new("picture#{i}")
  13. end
  14. else
  15. @array = []
  16. for i in 1..5
  17. @array[i] = Sprite.new
  18. @array[i].bitmap = Bitmap.new("#{i}")
  19. end
  20. end
复制代码

点评

嗯最后少了一个end,反正思路就这样  发表于 2013-9-21 19:30
好像最后少了一个end  发表于 2013-9-21 19:28
回复

使用道具 举报

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
回帖
10960

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

 楼主| 发表于 2013-9-21 19:35:05 | 显示全部楼层
恋′挂机 发表于 2013-9-21 19:28
第三项没看懂,不知道是不是临时改图片?也就是本来调用的是A图片,现在临时换为B图片,如果是的话,就不 ...

的确是临时读取图片的说,但是读取的图片是根据之前的。
rand随机数读取的。脚本中:rand = 1时,显示的是莉德露名称组的图片
rand = 2时,显示的是巫女名称组的图片。
所以,当rand=1 时,临时读取莉德露组的图片3,加上等待效果。
当rand=2时,临时读取巫女组的图片3,加上等待效果。

而且这些我觉得应该可以在
if Input.trigger?(Input::C)
    case @command_index  
      when 0
        command_new_game
      when 1
        command_continue
      when 2
        
      when 3
        command_shutdown
      end
    end
内完成,而我i就是没有思路······
所以,请继续求指导。
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复

使用道具 举报

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
回帖
1223
发表于 2013-9-21 19:44:37 | 显示全部楼层
在之前rand的时候用一个中间变量代替,
本来是
@xx.bitmap = Bitmap.new("#{rand(5) + 1}")
现在换成
@rand_num = rand(5) + 1
@xx.bitmap = Bitmap.new("#{@rand_num}")

这样就可以通过分歧@rand_num判断原来调用的是哪张图

再根据上边的思路应该就可以了。


在Input::C里边也是可以的

评分

参与人数 1星屑 +66 收起 理由
美丽晨露 + 66 我很赞同

查看全部评分

回复

使用道具 举报

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
回帖
10960

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

 楼主| 发表于 2013-9-21 20:05:17 | 显示全部楼层
恋′挂机 发表于 2013-9-21 19:44
在之前rand的时候用一个中间变量代替,
本来是
@xx.bitmap = Bitmap.new("#{rand(5) + 1}")

思路还是可行的,但是我还是有些蒙······
这是我之前写的脚本······
  1. # 随机人物
  2.     randpeople = rand(2)
  3.    #生成人物
  4.     @lidelu = Sprite.new
  5.     @lidelubmp = []
  6.     for j in 0...3
  7.       case randpeople
  8.       when 0
  9.       @lidelubmp[j] = Bitmap.new("Graphics/Titles/莉德露" + (j + 1).to_s)
  10.       when 1
  11.       @lidelubmp[j] = Bitmap.new("Graphics/Titles/巫女" + (j + 1).to_s)
  12.       end
  13.     end
复制代码
表示是用when判定显示的图片组······
是图片组不是单张图片。
然后在
  1. if Input.trigger?(Input::C)
  2.     case @command_index  
  3.       when 0
  4. case randpeople
  5.       when 0
  6.       @lidelubmp.bitmap= Bitmap.new("Graphics/Titles/莉德露3" )
  7.       when 1
  8.       @lidelubmp.bitmap = Bitmap.new("Graphics/Titles/巫女3" )
  9.       end
  10.     end
  11.        100.times{Graphics.update}
  12.         command_new_game
  13.       when 1
  14.         command_continue
  15.       when 2
  16.         
  17.       when 3
  18.         command_shutdown
  19.       end
  20.     end
复制代码
如上修改好像是行不通的啊,求一种可行的方法。

点评

稍等10分钟左右解决一下内务  发表于 2013-9-21 20:07
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部