设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2155|回复: 5
打印 上一主题 下一主题

[RMVA发布] MusicRoom 音乐房

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1789
在线时间
951 小时
注册时间
2012-7-5
帖子
245
跳转到指定楼层
1
发表于 2017-1-9 15:28:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 浮云半仙 于 2018-7-8 14:08 编辑



场景是 Scene_MusicRoom

这里只放脚本好了...

因为音乐什么也许会有版权问题?我就不放样例工程了...

需要添加音乐的话修改脚本第28行那个数组。(你需要看看F1文档里面ruby的数组和哈希表)

背景图片脚本里默认写nil了(无背景图片)需要的话修改 MUSIC_ROOM_BACKGROUND ,例如 MUSIC_ROOM_BACKGROUND = "./Graphics/Pictures/background.png"

音乐目录钦定为/Audio/BGM,不滋瓷有中文/空格(解决办法可以用某EasyConv脚本转码,文件名带空格可以用GetShortPathName这个API。。这里懒得弄了)

播放音乐用的是windows api,也可以用Audio.bgm_play (后者支持的格式貌似更多,懒得改了....)(

就这样吧,有需要用的请便...暂时并没有更新的想法..

这个代码框还是不能正确显示@开头的东西,导致显示的脚本不正确。这里也以txt文件的形式给出脚本 MusicRoom.zip (2.06 KB, 下载次数: 84)

RUBY 代码复制下载
  1. # 音乐室系统
  2. # 沉迷叶子姐姐的半云献给叶子姐姐...(逃)
  3.  
  4. # 实现了音乐播放功能(废话。。。)
  5. # 界面还需要再美观一些呢
  6.  
  7. #音乐室的背景图片,如果不需要背景图片把这个赋值为nil
  8. MUSIC_ROOM_BACKGROUND = nil
  9.  
  10. #这段就是音乐的定义啦
  11. class MusicItem
  12.   attr_reader :name, :author, :filename, :note, :from
  13.   def initialize(info)
  14.       @name = info[:name]?info[:name]:"music"
  15.       @author = info[:author]?info[:author]:"Violacea"
  16.       @note = info[:note]?info[:note]:"Nothing"
  17.       @from = info[:from]?info[:from]:"不懂乐理瞎哼组"
  18.       throw ArgumentError, "音乐(MusicItem)的文件名是必要的" if !info[:filename]
  19.       @filename = info[:filename]
  20.   end
  21. end
  22.  
  23. #音乐列表,默认(其实是钦定)音乐的源文件在Audio/BGM下
  24. #曲子的说明(note)可以有换行,需要自行处理换行符\n
  25. #不要忘了有转义的字符串要用双引号...
  26. #文件名是可以是中文的(但是现在还没支持..最近两天6r上不去找不到兰兰姐姐那篇解决
  27. # api调用里面中文路径名的问题的文章了..
  28. MUSIC_LIST = [
  29.     MusicItem.new(:name => '上海红茶馆', :filename => "th06_06.wav",
  30.               :from => '上海爱丽丝幻乐团', :author => 'ZUN',
  31.         :note => "  东方红魔乡第三面道中曲,浓\n浓中国风")
  32.   ]
  33.  
  34. #下面是主要的实现
  35. class Window_MusicChoose < Window_Command
  36.  
  37.   attr_reader :music
  38.   def initialize(ms)  #
  39.     super(0, Graphics.height/6)
  40.     self.back_opacity = 0
  41.     [url=home.php?mod=space&uid=267691]@Music[/url] = ms
  42.     create_music_list
  43.   end
  44.   def window_width
  45.     Graphics.width/3
  46.   end
  47.   def window_height
  48.     Graphics.height/6*5
  49.   end
  50.  
  51.   def create_music_list  #绘制项目
  52.     @music.each do |m|
  53.       add_command(m.name, m.filename.to_sym, true) #就这样懒省事啦~
  54.     end
  55.     ([email]0...@music.size[/email]).each{|i| draw_item(i)}
  56.   end
  57.  
  58. end
  59.  
  60. class Window_MusicInfo < Window_Base
  61.   def initialize
  62.     super(Graphics.width/3, 0, Graphics.width/3*2, Graphics.height)
  63.     self.back_opacity = 0
  64.   end
  65.  
  66.   def show_title(music)  #绘制音乐的名字
  67.     contents.font.size = 32
  68.     draw_text(4, 0, width, 40, music.name, 0)
  69.   end
  70.   def show_from(music)   #来源
  71.     contents.font.size = 22
  72.     draw_text(0, 40, width, 40, "From #{music.from}  ", 2)
  73.   end
  74.   def show_author(music) #作者
  75.     contents.font.size = 22
  76.     draw_text(0, 70, width, 40, "By #{music.author}  ", 2)
  77.   end
  78.   def show_note(music) #备注
  79.     draw_text_ex(0, 140, music.note)
  80.   end
  81. end
  82.  
  83. class Scene_MusicRoom < Scene_Base
  84.   def start
  85.     super
  86.     create_music_window #音乐室标题
  87.     create_music_choose_window #音乐选择窗口
  88.     create_music_info_window  #音乐信息窗口
  89.     create_background #加载背景图片
  90.   end
  91.  
  92.   def create_music_window
  93.     w = Graphics.width/3
  94.     h = Graphics.height/6
  95.     @music_window = Window_Base.new(0, 0, w, h)
  96.     @music_window.contents.font.size = 32
  97.     @music_window.draw_text(0, -10, w, h, "音乐室  ", 1) #居中显示
  98.   end
  99.   def create_music_choose_window
  100.     @choose_window = Window_MusicChoose.new(load_music_list)
  101.     @choose_window.set_handler(:cancel, method(:on_cancel))
  102.     @choose_window.set_handler(:ok, method(:on_choose_music))
  103.     @choose_window.back_opacity = 0
  104.   end
  105.   def create_music_info_window
  106.     @info_window = Window_MusicInfo.new
  107.     show_music_info(0)
  108.   end
  109.   def create_background
  110.     return if !MUSIC_ROOM_BACKGROUND
  111.     @background = Sprite.new
  112.     @background.bitmap = Bitmap.new(MUSIC_ROOM_BACKGROUND)
  113.     @background.x = 0
  114.     @background.y = 0
  115.     @background.z = -233
  116.   end
  117.   def destroy_background
  118.     @background.dispose if @background.is_a?(Sprite)
  119.   end
  120.  
  121.   def load_music_list #注:文件名是可以支持中文的,解决方法在兰触的文章里面...
  122.     MUSIC_LIST
  123.   end
  124.  
  125.   #展示音乐信息
  126.   def show_music_info(id)
  127.     m = @choose_window.music[id]
  128.     @info_window.contents.clear
  129.     @info_window.show_title(m)
  130.     @info_window.show_from(m)
  131.     @info_window.show_author(m)
  132.     @info_window.show_note(m)
  133.   end
  134.  
  135.   MSS = Win32API.new("winmm", "mciSendString", "plll", "l") #这个神奇的api
  136.   MARK = "music_233"  #这个名字不要在意啦
  137.   def stop_music  #停止正在播放的音乐
  138.     MSS.call "stop #{MARK}", 0, 0, 0
  139.     MSS.call "close #{MARK}", 0, 0, 0
  140.   end
  141.   def play_music(id) #播放音乐(参数,列表中的id)
  142.     stop_music
  143.     MSS.call sprintf("open ./Audio/BGM/%s alias %s", @choose_window.music[id].filename, MARK), 0, 0, 0
  144.     MSS.call "play #{MARK}", 0, 0, 0
  145.   end
  146.  
  147.   def on_choose_music #选择一个音乐时的处理
  148.     show_music_info(@choose_window.index)
  149.     play_music(@choose_window.index)
  150.     @choose_window.activate
  151.   end
  152.   def on_cancel  #退出音乐室
  153.     stop_music   #退出前要stop_music
  154.     destroy_background
  155.     SceneManager.return
  156.   end
  157. end

评分

参与人数 4星屑 +499 收起 理由
zaiy2863 + 266 好死不死的弄个wav
VIPArcher + 67
kuerlulu + 100
OldtreeLethe + 66 啧半云

查看全部评分

tan(pi/2)

Lv6.析梦学徒

梦石
56
星屑
14892
在线时间
3853 小时
注册时间
2016-6-17
帖子
1051

极短24参与开拓者

2
发表于 2017-1-9 15:56:20 | 只看该作者
只要不做商用,那个什么……供学习交流使用,应该……就不会造成侵权把?
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42414
在线时间
7603 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

3
发表于 2017-1-9 18:56:43 | 只看该作者
用默认的包装好的播放不好吗……api又没有优势。

点评

因为叶子姐姐触啊  发表于 2017-1-9 20:58
叶子姐姐要影响全世界了!  发表于 2017-1-9 18:59
嘛,其实是我RGSS很小白的啦,用了API后来查F1才知道Audio里面直接用的方法。 而且叶子姐姐也用不到了我也就懒得改了  发表于 2017-1-9 18:58
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-25 11:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表