查看: 2293|回复: 6

[已经解决] 地图怎么做成旁边黑,人物旁边亮啊?

[复制链接]
梦石
0
星屑
50
在线时间
36 小时
注册时间
2014-10-3
回帖
45
发表于 2014-10-4 20:40:23 | 显示全部楼层 |阅读模式

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

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

×
有蜡烛或者灯的地方也会亮的

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-10-4 20:44:10 | 显示全部楼层
回复

使用道具 举报

梦石
0
星屑
124
在线时间
900 小时
注册时间
2012-11-13
回帖
845
发表于 2014-10-4 20:45:14 | 显示全部楼层
废弃
回复

使用道具 举报

梦石
0
星屑
50
在线时间
36 小时
注册时间
2014-10-3
回帖
45
 楼主| 发表于 2014-10-4 20:47:05 | 显示全部楼层
taroxd 发表于 2014-10-4 20:44
https://rpg.blue/thread-224000-1-1.html

下了打不开游戏啊,说什么英文之类的
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-10-4 21:09:28 | 显示全部楼层
这个问题我是不是在XP提问区才看到过···烛光脚本不能满足你吗?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

炎

梦石
0
星屑
98
在线时间
1617 小时
注册时间
2013-8-15
回帖
4322
发表于 2014-10-4 21:22:55 | 显示全部楼层
本帖最后由 永燃的狂炎 于 2014-10-4 21:41 编辑

[box=DarkRed]-脚本-[/box]

脚本①
  1. # coding: utf-8
  2. =begin
  3. = Bitmapクラスの拡張 (DLL版)
  4. RPGツクールXP/VX共用
  5. Bitmapクラスに機能を追加します。
  6. - Marshaldump可能に
  7. - PNGファイルとして保存
  8. - 色調変更
  9. - モザイク効果
  10. - 色の反転
  11. - ぼかし効果
  12. - マスクを用いた切り抜き
  13. - ブレンディング

  14. ■ 注意
  15. このスクリプトの他に"tktk_bitmap.dll"(ver0.1.2.6以上)が必要になります。

  16. Author::    半生
  17. Date::      2010/12/13
  18. Version::   0.1.2.6
  19. URL::       http://www.tktkgame.com/

  20. ############################################
  21. 2010/12/13 ver 0.1.2.6
  22.  dllの名称を"hn_rg_bitmap.dll"から"tktk_bitmap.dll"に変更
  23.  LARGE_BITMAP機能でメモリを確保できなかった場合の処理を追加
  24. 2010/10/12 ver 0.1.2.5(デンジャラスベータ版)
  25.  大きいサイズのBitmapオブジェクトを機能を試験的に実装(危険)
  26. 2010/03/24 ver 0.1.2.2
  27.  ブレンディング機能関連の軽量化。
  28.  画像連結系メソッドの分離。
  29. 2010/03/24 ver 0.1.2.1
  30.  ブレンディング機能関連のバグフィックス
  31. 2010/03/22 ver 0.1.2.0
  32.  加算合成等のブレンディング機能の追加
  33. 2010/02/07 ver 0.1.1.0
  34.  マーシャル化の処理の一部をDLLに移動
  35. 2010/01/17 ver 0.1.0.0
  36.  dllの名称を"hn_rx_bitmap.dll"から"hn_rg_bitmap.dll"に変更
  37.  モザイク効果・色反転・ぼかし効果の追加
  38. ############################################
  39. =end

  40. module TKTK_Bitmap
  41.   LARGE_BITMAP = true # 大容量のBitmap作成機能を使うかどうか
  42.   DLL_NAME = 'tktk_bitmap'

  43.   ERROR_ALLOCATE_FAILED = -110002

  44.   @@png_save = Win32API.new(DLL_NAME, 'PngSaveA', 'p n i i', 'i')
  45.   @@blur = Win32API.new(DLL_NAME, 'Blur', 'n i', 'i')
  46.   @@change_tone = Win32API.new(DLL_NAME, 'ChangeTone', 'n i i i i', 'i')
  47.   @@clip_mask = Win32API.new(DLL_NAME, 'ClipMask', 'n n i i i', 'i')
  48.   @@invert = Win32API.new(DLL_NAME, 'InvertColor', 'n', 'i')
  49.   @@mosaic = Win32API.new(DLL_NAME, 'Mosaic', 'n i i i i i i', 'i')
  50.   @@address = Win32API.new(DLL_NAME, 'GetAddress', 'n', 'n')
  51.   @@get_pixel_data = Win32API.new(DLL_NAME, 'GetPixelData', 'n p i', 'i')
  52.   @@set_pixel_data = Win32API.new(DLL_NAME, 'SetPixelData', 'n p i', 'i')
  53.   @@blend_blt = Win32API.new(DLL_NAME, 'BlendBlt', 'n i i n i i i i i i', 'i')
  54.   #@@get_hwnd = Win32API.new(DLL_NAME, 'GetGameHWND', 'v', 'l')
  55.   @@change_size = Win32API.new(DLL_NAME, 'ChangeSize', 'n i i', 'i')
  56.   module_function

  57.   # PNG形式で保存
  58.   def png_save(bitmap,file_name,compression_level,filter)
  59.     return @@png_save.call(file_name, bitmap.object_id, compression_level, filter)
  60.   end

  61.   # ぼかし効果
  62.   def blur(bitmap, r = 1)
  63.     return @@blur.call(bitmap.object_id, r)
  64.   end
  65.   
  66.   # カラーバランス変更?
  67.   def change_tone(bitmap, red = 0, green = 0, blue = 0, simplify = 1)
  68.     return @@change_tone.call(bitmap.object_id, red, green, blue, simplify)
  69.   end

  70.   # マスクによる画像の切り抜き(アルファとの乗算)
  71.   def clip_mask(g_bitmap, m_bitmap, x=0, y=0, outer=0)
  72.     return @@clip_mask.call(g_bitmap.object_id, m_bitmap.object_id, x, y, outer)
  73.   end

  74.   # 色の反転
  75.   def invert(bitmap)
  76.     return @@invert.call(bitmap.object_id)
  77.   end

  78.   # モザイク効果
  79.   def mosaic(bitmap, msw=5, msh=5)
  80.     return self.mosaic_rect(bitmap, bitmap.rect, msw, msh)
  81.   end

  82.   # モザイク効果(範囲指定)
  83.   def mosaic_rect(bitmap, rect, msw=5, msh=5)
  84.     return @@mosaic.call(bitmap.object_id,
  85.     rect.x, rect.y, rect.width, rect.height, msw, msh)
  86.   end

  87.   # ビットマップデータのアドレスを取得
  88.   def address(bitmap)
  89.     return @@address.call(bitmap.object_id)
  90.   end
  91.   
  92.   # ビットマップのバイナリデータを取得
  93.   def get_pixel_data(bitmap)
  94.     buffer = "bgra" * bitmap.width * bitmap.height
  95.     @@get_pixel_data.call(bitmap.object_id, buffer, buffer.size)
  96.     return buffer
  97.   end
  98.   
  99.   # ビットマップのバイナリデータを置き換え
  100.   def set_pixel_data(bitmap, data)
  101.     return @@set_pixel_data.call(bitmap.object_id, data, data.size)
  102.   end
  103.   
  104.   def blend_blt(dest_bmp, x, y, src_bmp, rect, blend_type=0, opacity=255)
  105.     @@blend_blt.call(dest_bmp.object_id, x, y, src_bmp.object_id,
  106.                 rect.x, rect.y, rect.width, rect.height,
  107.                 blend_type, opacity)
  108.   end

  109.   # ビットマップのサイズを変更(危険)
  110.   def change_size(bitmap, new_width, new_height)
  111.     return -1 if (new_width <=0 or new_height <= 0)
  112.     result = @@change_size.call(bitmap.object_id, new_width, new_height)
  113.     if result == ERROR_ALLOCATE_FAILED
  114.       raise("tktk_bitmap:ERROR ALLOCATE FAILED")
  115.     end
  116.     return result
  117.   end
  118.   
  119. end

  120. class Font
  121.   def marshal_dump;end
  122.   def marshal_load(obj);end
  123. end
  124. class Bitmap
  125.   # PNG圧縮用フィルタ
  126.   PNG_NO_FILTERS   = 0x00
  127.   PNG_FILTER_NONE  = 0x08
  128.   PNG_FILTER_SUB   = 0x10
  129.   PNG_FILTER_UP    = 0x20
  130.   PNG_FILTER_AVG   = 0x40
  131.   PNG_FILTER_PAETH = 0x80
  132.   PNG_ALL_FILTERS  = (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP |
  133.                       PNG_FILTER_AVG | PNG_FILTER_PAETH)

  134.   # Marshal_dump
  135.   def _dump(limit)
  136.     return "" if self.disposed?
  137.     data = TKTK_Bitmap.get_pixel_data(self)
  138.     [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # ついでに圧縮
  139.   end
  140.   
  141.   # Marshal_load
  142.   def self._load(str)
  143.     if str == ""
  144.       b = Bitmap.new(1,1)
  145.       b.dispose
  146.       return b
  147.     end
  148.     w, h, zdata = str.unpack("LLa*"); b = new(w, h)
  149.     TKTK_Bitmap.set_pixel_data(b, Zlib::Inflate.inflate(zdata))
  150.     return b
  151.   end  
  152.   
  153.   def address
  154.     TKTK_Bitmap.address(self)
  155.   end

  156.   # ぼかし効果
  157.   def blur2(r=1)
  158.     TKTK_Bitmap.blur(self, r)
  159.   end

  160.   # 色調変更
  161.   def change_tone(red, green, blue, simplify = 1)
  162.     TKTK_Bitmap.change_tone(self, red, green, blue, simplify)
  163.   end
  164.   
  165.   # クリッピング
  166.   def clip_mask(bitmap, x=0, y=0, outer=0)
  167.     TKTK_Bitmap.clip_mask(self, bitmap, x, y, outer)
  168.   end

  169.   # 色の反転
  170.   def invert
  171.     TKTK_Bitmap.invert(self)
  172.   end

  173.   # モザイク効果
  174.   def mosaic(msw=5, msh=5)
  175.     TKTK_Bitmap.mosaic(self, msw, msh)
  176.   end

  177.   # モザイク効果(領域指定)
  178.   def mosaic_rect(rect=self.rect, msw=5, msh=5)
  179.     TKTK_Bitmap.mosaic_rect(self, rect, msw, msh)
  180.   end

  181.   # ブレンディング
  182.   def blend_blt(x, y, src_bmp, rect, blend_type=0, opacity=255)
  183.     return if opacity <= 0
  184.     TKTK_Bitmap.blend_blt(self, x, y, src_bmp, rect, blend_type, opacity)
  185.   end

  186.   #png形式で保存
  187.   def png_save(outp, level = 9, filter = PNG_NO_FILTERS)
  188.     if (TKTK_Bitmap.png_save(self, outp, level, filter) != 0)
  189.       raise("Bitmap\#png_save failed")
  190.     end
  191.   end

  192.   # 大きいサイズのBitmap.newを可能に(危険)
  193.   # width * height が大体1073741823位まで
  194.   if TKTK_Bitmap::LARGE_BITMAP
  195.     class << self
  196.       unless method_defined?(:_hn_large_bm__new)
  197.         alias :_hn_large_bm__new :new
  198.       end
  199.       def new(*args)
  200.         if args.size == 2 && args[0] * args[1] >= 4194304
  201.           new_width = args[0]
  202.           new_height = args[1]
  203.           # とりあえず小さなサイズで作成
  204.           bitmap = _hn_large_bm__new(16, 16)
  205.           TKTK_Bitmap.change_size(bitmap, new_width, new_height)
  206.           return bitmap
  207.         else
  208.           _hn_large_bm__new(*args)
  209.         end
  210.       end
  211.     end # Bitmap.new
  212.   end
  213. end # CLASS Bitmap
复制代码

脚本②
  1. =begin
  2.   HN_Light version 1.0.1.0 for VX Ace
  3.         by 半生
  4. http://www.tktkgame.com

  5.   要HN_RG_BITMAP(ver 0.1.2.1以降)

  6. 2012/01/08 ver 1.0.1.2
  7.  隊列歩行の仲間に対応

  8. =end

  9. # ----- ▽ 設定ここから ▽ -----
  10. module HN_Light
  11.   # 簡略化 0:(メタボ)~2:(荒めだけど軽い)
  12.   SIMPLIFY = 1
  13.   
  14.   # プレイヤーの灯りタイプに使う変数番号
  15.   PLAYER_LIGHT_TYPE = 12

  16.   # 仲間の灯りタイプに使う変数番号
  17.   FOLLOWER_LIGHT_TYPE = 12
  18.   
  19.   # 暗闇判定に使うスイッチ
  20.   DARK_SWITCH = 11
  21.   
  22.   # 灯りイベント識別用の正規表現
  23.   REGEX_LIGHT = /@灯り(\d+)/
  24.   
  25.   # 灯り画像のディレクトリ
  26.   LIGHT_IMG_DIR = "Graphics/Pictures/"
  27.   
  28.   # 灯りBitmap設定
  29.   LIGHTS = [
  30.   # [FILENAME, CELLS, ZOOM, OFFSET_Y, HUE]
  31.     ["light5",     1,  1.5,        0,   0],
  32.     ["light2",     1,  1.0,        0,   0],
  33.     ["light3",     1,  0.8,        0,   0],
  34.     ["light4",     1,  1.0,      -16,   0],
  35.     ["light5",     1,  2.0,        0,   0],
  36.     ["light6",     1,  1.0,        0,   0],
  37.     ["light7",     1,  3.0,      -16,   0],
  38.     ["light1",     1,  0.5,        0,   0],
  39.     ["light6",     1,  2.0,        0,   0],
  40.   ]
  41. end
  42. # ----- △ 設定ここまで △ -----

  43. module HN_Light
  44.   # イベントへのmix-in用
  45.   module LightEvent
  46.     attr_reader :light_type
  47.     def initialize
  48.       super()
  49.       @light_type = 0
  50.     end
  51.    
  52.     def check_light
  53.       @light_type = 0
  54.       return if @list.nil?
  55.       @list.each do |command|
  56.         break if @light_type > 0
  57.         if command.code == 108 or command.code == 408
  58.           command.parameters.each do |line|
  59.             if line =~ REGEX_LIGHT
  60.               @light_type = $1.to_i
  61.               break
  62.             end
  63.           end
  64.         end
  65.       end # END @list.each
  66.     end
  67.    
  68.   end # END module LightEvent
  69.   
  70.   
  71.   class Light
  72.     attr_reader :bitmap
  73.     attr_reader :cells
  74.     attr_reader :width
  75.     attr_reader :height
  76.     attr_reader :ox
  77.     attr_reader :oy
  78.     def initialize(light_type, s_zoom = 1)
  79.       light = LIGHTS[light_type - 1]
  80.       if light.nil?
  81.         # 本来ならここには来ないはず
  82.         @bitmap = Bitmap.new(32, 32)
  83.         @cels = 1
  84.         [url=home.php?mod=space&uid=98379]@zoom[/url] = 1.0
  85.         @oy = 16
  86.         @ox = 16
  87.         @width  = 32
  88.         [url=home.php?mod=space&uid=291977]@height[/url] = 32
  89.       else
  90.         @bitmap = Bitmap.new(LIGHT_IMG_DIR + light[0])
  91.         @bitmap.invert()
  92.         @cells = light[1].to_i
  93.         @cells = 1 if (@cells < 1 or @cells > @bitmap.width)
  94.         [url=home.php?mod=space&uid=98379]@zoom[/url] = light[2].to_f
  95.         @zoom = 1.0 if @zoom <= 0.0
  96.         @zoom /= s_zoom
  97.         @width  = @bitmap.width / @cells
  98.         [url=home.php?mod=space&uid=291977]@height[/url] = @bitmap.height

  99.         # 拡大縮小処理
  100.         if @zoom != 1.0
  101.           new_width  = (@width * @zoom).round
  102.           new_height = (@height * @zoom).round
  103.           if new_width * new_height < 1
  104.             @zoom = 1.0
  105.           else
  106.             @width = new_width
  107.             @height = new_height
  108.             new_bitmap = Bitmap.new(@width * @cells, @height)
  109.             new_bitmap.stretch_blt(new_bitmap.rect,@bitmap, @bitmap.rect)
  110.             @bitmap.dispose
  111.             @bitmap = new_bitmap
  112.           end
  113.         end
  114.         @ox = @width / 2
  115.         @oy = @height / 2 - light[3].to_i / s_zoom

  116.         # 色相変換
  117.         if ( (hue = light[4].to_i) != 0)
  118.           @bitmap.hue_change(hue)
  119.         end
  120.       end
  121.     end # End def initialize

  122.     # 終了処理
  123.     def dispose
  124.       @bitmap.dispose
  125.       @bitmap = nil
  126.     end
  127.   end

  128. end

  129. class Game_Event
  130.   include HN_Light::LightEvent
  131.   alias :_hn_light__setup :setup_page unless method_defined?(:_hn_light__setup)
  132.   def setup_page(new_page)
  133.     _hn_light__setup(new_page)
  134.     check_light()
  135.   end
  136. end

  137. class Game_Player
  138.   def light_type
  139.     return $game_variables[HN_Light::PLAYER_LIGHT_TYPE]
  140.   end
  141. end

  142. class Game_Follower
  143.   def light_type
  144.     return 0 if !self.visible?
  145.     return $game_variables[HN_Light::FOLLOWER_LIGHT_TYPE]
  146.   end
  147. end

  148. class Game_Map
  149.   attr_reader :light_events
  150.   
  151.   # 灯りイベントリストの更新
  152.   def refresh_lights
  153.     @light_events = []
  154.     @events.values.each do |event|
  155.       if (event.light_type > 0)
  156.         @light_events.push(event)
  157.       end
  158.     end
  159.   end

  160.   alias :_hn_light__setup_events :setup_events unless method_defined?(:_hn_light__setup_events)
  161.   def setup_events
  162.     _hn_light__setup_events()
  163.     refresh_lights()
  164.   end
  165.   
  166.   alias :_hn_light__refresh :refresh unless method_defined?(:_hn_light__refresh)
  167.   def refresh
  168.     _hn_light__refresh()
  169.     refresh_lights()
  170.   end
  171. end

  172. class Sprite_Dark < Sprite
  173.   @@base_color = Color.new(255,255,255)

  174.   def initialize(viewport = nil)
  175.     super(viewport)
  176.     @width = Graphics.width
  177.     @height = Graphics.height
  178.    
  179.     case HN_Light::SIMPLIFY
  180.     when 1
  181.       @zoom = 2
  182.     when 2
  183.       @zoom = 4
  184.     else
  185.       @zoom = 1
  186.     end
  187.     @width /= @zoom
  188.     @height /= @zoom
  189.     self.zoom_x = @zoom.to_f
  190.     self.zoom_y = @zoom.to_f
  191.    
  192.     self.bitmap = Bitmap.new(@width, @height)
  193.     self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
  194.     self.blend_type = 2 # ブレンドタイプ(減算)
  195.     self.z = 500
  196.     self.visible = false
  197.     @light_cache = {}
  198.   end

  199.   # 灯りを追加する
  200.   def add_light(charactor)
  201.     return if charactor.nil?
  202.     light_type = charactor.light_type
  203.     return if (light_type < 1 or light_type > HN_Light::LIGHTS.size)
  204.     unless @light_cache.key?(light_type)
  205.       @light_cache[light_type] = HN_Light::Light.new(light_type, @zoom)
  206.     end
  207.     light = @light_cache[light_type]

  208.     # 画面外の場合は何もしない
  209.     if @zoom == 1
  210.       return if (charactor.screen_x < 0  - light.width + light.ox)
  211.       return if (charactor.screen_x > @width + light.ox)
  212.       return if (charactor.screen_y < 0 - light.height + light.oy)
  213.       return if (charactor.screen_y > @height + light.oy)
  214.     else
  215.       return if (charactor.screen_x < 0  - (light.width + light.ox) * @zoom)
  216.       return if (charactor.screen_x > (@width + light.ox)  * @zoom)
  217.       return if (charactor.screen_y < 0 - (light.height + light.oy) * @zoom)
  218.       return if (charactor.screen_y > (@height + light.oy) * @zoom)
  219.     end

  220.     # アニメーション判定
  221.     if light.cells > 1
  222.       index = (Graphics.frame_count / 4) % light.cells
  223.       rect = Rect.new(index * light.width , 0, light.width, light.height)
  224.     else
  225.       rect = light.bitmap.rect
  226.     end
  227.     if @zoom != 1
  228.       p_x = charactor.screen_x / @zoom - light.ox
  229.       p_y = (charactor.screen_y - 16) / @zoom - light.oy
  230.     else
  231.       p_x = charactor.screen_x - light.ox
  232.       p_y = charactor.screen_y - 16 - light.oy
  233.     end
  234.    
  235.     # 乗算合成(3)
  236.     self.bitmap.blend_blt(p_x, p_y, light.bitmap, rect, 3)
  237.   end

  238.   
  239.   def refresh
  240.     self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
  241.     $game_map.light_events.each do |event|
  242.       next if HN_Light::LIGHTS[event.light_type - 1].nil?
  243.       add_light(event)
  244.     end
  245.     add_light($game_player)
  246.     $game_player.followers.each{|f| add_light(f)}
  247.   end
  248.   
  249.   # 更新
  250.   def update
  251.     super
  252.     refresh()
  253.   end
  254.   
  255.   #--------------------------------------------------------------------------
  256.   # ● 解放
  257.   #--------------------------------------------------------------------------
  258.   def dispose
  259.     self.bitmap.dispose
  260.     @light_cache.values.each do |light|
  261.       light.dispose
  262.     end
  263.     super
  264.   end
  265. end


  266. class Spriteset_Map  
  267.   # 暗闇スプライトの作成
  268.   def create_dark
  269.     @dark_sprite = Sprite_Dark.new(@viewport1)
  270.   end

  271.   # 暗闇スプライトの更新
  272.   def update_dark
  273.     if (@dark_sprite.visible = $game_switches[HN_Light::DARK_SWITCH])
  274.       @dark_sprite.update
  275.     end
  276.   end

  277.   # 暗闇スプライトの破棄
  278.   def dispose_dark
  279.     @dark_sprite.dispose
  280.   end
  281.   
  282.   # 初期化
  283.   alias :_dark__initialize :initialize unless private_method_defined?(:_dark__initialize)
  284.   def initialize
  285.     _dark__initialize()
  286.     create_dark()
  287.     update_dark()
  288.   end
  289.   
  290.   # 更新
  291.   alias :_dark__update :update unless method_defined?(:_dark__update)
  292.   def update
  293.     _dark__update()
  294.     update_dark() if !@dark_sprite.nil? and !@dark_sprite.disposed?
  295.   end
  296.   
  297.   # 終了処理
  298.   alias :_dark__dispose :dispose unless method_defined?(:_dark__dispose)
  299.   def dispose
  300.     dispose_dark()
  301.     _dark__dispose()
  302.   end
  303. end
复制代码

脚本③
  1. =begin
  2.  ■ RGDS_Base ver 0.0.0.9
  3. 動画再生スクリプト(ベース)for DLL(ver0.0.0.8)
  4. =end
  5. module RGDS
  6.   DLL_NAME = "HNRGDS"
  7.   
  8.   module State
  9.     NO_CONNECT = 0
  10.     OPENING = 5
  11.     READY = 10
  12.     RUN   = 21
  13.     PAUSE = 22
  14.   end
  15.   
  16.   STATE_NO_CONNECT = 0
  17.   STATE_OPENING = 5
  18.   STATE_READY = 10
  19.   STATE_RUN   = 21
  20.   STATE_PAUSE = 22
  21.   
  22.   @@open = Win32API.new(DLL_NAME, 'OpenMovieA', 'ip', 'l')
  23.   @@get_size = Win32API.new(DLL_NAME, 'GetVideoSize', 'p', 'i')
  24.   @@close = Win32API.new(DLL_NAME, 'CloseMovie', 'v', 'i')
  25.   @@update_video = Win32API.new(DLL_NAME, 'UpdateVideo', 'n', 'i')
  26.   @@run = Win32API.new(DLL_NAME, 'RunMovie', 'v', 'i')
  27.   @@pause = Win32API.new(DLL_NAME, 'PauseMovie', 'v', 'i')
  28.   @@get_volume = Win32API.new(DLL_NAME, 'GetVolume', 'v', 'l')
  29.   @@set_volume = Win32API.new(DLL_NAME, 'SetVolume', 'l', 'l')
  30.   @@state = Win32API.new(DLL_NAME, 'GetState', 'v', 'i')
  31.   
  32.   @@state = 0
  33.   @@system_pause = false
  34.   @@volume = 10000
  35.   @@visible = true
  36.   @@x = 0
  37.   @@y = 0
  38.   @@width_max  = 0
  39.   @@height_max = 0
  40.   @@filename = ""

  41.   @@bitmap = Bitmap.new(16, 16)
  42.   @@bitmap.clear
  43.   class << @@bitmap
  44.     alias :_dispose :dispose unless method_defined?(:_dispose)
  45.     def dispose
  46.     end
  47.   end
  48.   @@bitmap_changed = true
  49.   
  50.   def self.open(filename)
  51.     if @@filename != filename
  52.       self.close
  53.     end
  54.     result = @@open.call(filename.size, filename);
  55.     return result if result != 0
  56.     @@state = State::OPENING
  57.     @@filename = filename
  58.     return result
  59.   end
  60.   
  61.   def self.close
  62.     @@state = State::NO_CONNECT
  63.     @@filename = ""
  64.     @@close.call()
  65.     @@bitmap.clear
  66.   end
  67.   
  68.   def self.bitmap
  69.     @@bitmap
  70.   end

  71.   def self.bitmap_changed?
  72.     @@bitmap_changed
  73.   end

  74.   def self.bitmap_changed=(value)
  75.     @@bitmap_changed = value
  76.   end
  77.   
  78.   def self.filename
  79.     @@filename
  80.   end

  81.   def self.update
  82.     return 0 if !@@visible
  83.     if @@state >= State::READY
  84.       result = @@update_video.call(@@bitmap.object_id)
  85.       if (result == 0)
  86.         return 0
  87.       else
  88.         self.close()
  89.         return result
  90.       end
  91.     else
  92.       return -1
  93.     end
  94.   end

  95.   def self.wait_opening
  96.     return unless @@state == State::OPENING
  97.     buff_size = "\000" * 8
  98.     while(@@state == State::OPENING) do
  99.       result = @@get_size.call(buff_size)
  100.       if result == 0
  101.         break;
  102.       elsif result < 0
  103.         error_code = result
  104.         error_code = result & 0xFFFF
  105.         if DSError::JP_ERROR.key?(error_code)
  106.           print "エラー(#{error_code}):#{DSError::JP_ERROR[error_code]}"
  107.         else
  108.           print "エラー(#{error_code}):#{result}"
  109.         end
  110.         return result
  111.       end
  112.       5.times {Graphics.update}
  113.     end
  114.       
  115.     width, height = buff_size.unpack("ii")
  116.     if ( (@@bitmap.width != width) or (@@bitmap.height != height) )
  117.       @@bitmap._dispose
  118.       @@bitmap = Bitmap.new(width, height)
  119.       class << @@bitmap
  120.         alias :_dispose :dispose unless method_defined?(:_dispose)
  121.         def dispose
  122.         end
  123.       end
  124.       @@bitmap_changed = true
  125.     end
  126.     @@bitmap.clear
  127.     @@state = State::READY
  128.     return 0
  129.   end
  130.   
  131.   def self.run
  132.     self.wait_opening()
  133.     if @@state >= State::READY
  134.       self.set_volume(@@volume)
  135.       @@run.call()
  136.       @@state = State::RUN
  137.     end
  138.   end
  139.   
  140.   def self.pause
  141.     if @@state == State::RUN
  142.       @@pause.call()
  143.       @@state = State::PAUSE
  144.     end
  145.   end
  146.   
  147.   def self.get_volume
  148.     if @@state >= State::READY
  149.       @@volume = @@get_volume.call()
  150.     end
  151.     return @@volume
  152.   end
  153.   
  154.   def self.set_volume(volume)
  155.     volume = 0 if volume < 0
  156.     volume = 10000 if volume > 10000
  157.     @@volume = volume
  158.     if @@state >= State::READY
  159.       @@set_volume.call(volume)
  160.     end
  161.   end
  162.   
  163.   def self.active?
  164.     (@@state >= State::READY)
  165.   end

  166.   def self.system_pause
  167.     if @@state == State::RUN
  168.       self.pause()
  169.       @@system_pause = true
  170.       @@state == State::PAUSE
  171.     end
  172.   end
  173.   
  174.   def self.system_resume
  175.     if @@system_pause
  176.       self.run()
  177.       @@system_pause = false
  178.     end
  179.   end
  180.   
  181.   def self.visible
  182.     (@@visible && self.active? )
  183.   end
  184.   
  185.   # リセット対策
  186.   self.close()
  187. end

  188. module DSError
  189.   # HNRGDS.dll で独自に定義しているエラーコード
  190.   LOCAL_ERROR = {
  191.     -100001 => "ERROR_NO_WINDOW",
  192.     -100003 => "ERROR_WINDOW_OPENED",
  193.     -100004 => "ERROR_NO_CONNECT",
  194.     -100101 => "ERROR_CANT_OPEN_FILE",
  195.     -100201 => "ERROR_MOVIE_LODING",
  196.     -100205 => "ERROR_OPEN_TIMEOUT",
  197.     -100301 => "ERROR_NOT_PLAYING",
  198.     -100303 => "ERROR_DIFFERENT_SIZE",
  199.     -101404 => "ERROR_FILTER_NOT_FOUND",
  200.     -101406 => "ERROR_FILTER_UNSUPPORTED",
  201.   }
  202.   # DirectShowから返されるエラーの下位ビット
  203.   JP_ERROR = {
  204.     554 => "このピンは、提供されたメディア タイプを使えない",
  205.     555 => "このサンプルはレンダリングできない",
  206.     558 => "タイムアウト期間が過ぎた",
  207.     559 => "ファイル フォーマットが無効",
  208.     599 => "ビデオ ストリームを再生できない(レンダラ)",
  209.     600 => "オーディオ ストリームを再生できない(レンダラ)",
  210.     603 => "DirectShow はこのプロセッサ上で MPEG ムービーを再生できない",
  211.     604 => "オーディオ ストリームを再生できない(フォーマット)",
  212.     605 => "ビデオ ストリームを再生できない(フォーマット)",
  213.     606 => "規格に準拠していないので DirectShow で再生できない",
  214.     607 => "フィルタグラフに存在しないオブジェクトに要求された関数を実行できない",
  215.     612 => "バッファが十分に満たされていない",
  216.     613 => "ファイルを再生できない(フォーマット)",
  217.     614 => "同じ転送をサポートしていないのでピンどうしを接続できない",
  218.   }
  219. end
复制代码

脚本④
  1. =begin
  2.  ■ RGDS_SP ver 0.0.1.2
  3. 動画再生スクリプト(表示系)for VX Ace
  4. 動画再生スクリプト(ベース)より下に配置してください。

  5. =end
  6. module RGDS_SP
  7.   @@visible = false
  8.   
  9.   # ■ 動画設定クラス $game_system.movie_infoで使用
  10.   class MovieInfo
  11.     attr_reader :x
  12.     attr_reader :y
  13.     attr_reader :z
  14.     attr_reader :width_max
  15.     attr_reader :height_max
  16.     attr_reader :origin_center
  17.     attr_accessor :mode
  18.     attr_accessor :refresh_flag
  19.     def initialize
  20.       @x = Graphics.width / 2
  21.       @y = Graphics.height / 2
  22.       @z = 500
  23.       @width_max  = 0
  24.       @height_max = 0
  25.       @origin_center = true
  26.       @mode = 0
  27.       @refresh_flag = false
  28.     end
  29.    
  30.     # セッター
  31.     def x=(n)
  32.       @x = n
  33.       @refresh_flag = true
  34.     end
  35.     def y=(n)
  36.       @y = n
  37.       @refresh_flag = true
  38.     end
  39.     def z=(n)
  40.       @z = n
  41.       @refresh_flag = true
  42.     end
  43.     def width_max=(n)
  44.       @width_max = n
  45.       @refresh_flag = true
  46.     end
  47.     def width_max=(n)
  48.       @width_max = n
  49.       @refresh_flag = true
  50.     end
  51.     def origin_center=(flag)
  52.       @origin_center = flag
  53.       @refresh_flag = true
  54.     end

  55.     # ■ 表示位置、サイズを指定します。
  56.     #- x, y: 表示座標
  57.     #- width_max, height_max: 表示枠。この内部に収まるように拡大縮小します。
  58.     #                       : どちらかが0以下の場合拡大縮小は行われません。
  59.     #- orogin: 表示位置基準点 false(デフォ): 動画の左上, true: 動画の中心を上記
  60.     #-         の[x,y]にあわせます
  61.     def set_position(x=0,y=0,width_max=0,height_max=0,origin=false)
  62.       @x = x
  63.       @y = y
  64.       @width_max  = width_max
  65.       @height_max = height_max
  66.       @origin_center = origin
  67.       @refresh_flag = true
  68.     end
  69.    
  70.     # ■ 以降の表示位置、サイズをデフォルトに戻します。
  71.     # 拡大縮小なし、左上にあわせて表示
  72.     def reset_position
  73.       @x = Graphics.width / 2
  74.       @y = Graphics.height / 2
  75.       @width_max  = 0
  76.       @height_max = 0
  77.       @origin_center = true
  78.       @refresh_flag = true
  79.     end
  80.    
  81.   end
  82.   
  83.   
  84.   class MovieSprite < ::Sprite
  85.     # 初期化
  86.     def initialize(viewport=nil)
  87.       super
  88.       self.visible = false
  89.       self.bitmap = RGDS.bitmap
  90.       fix_position()
  91.     end

  92.     # 拡大縮小処理
  93.     def change_zoom
  94.       zoom = 1.0
  95.       bw = self.bitmap.width
  96.       bh = self.bitmap.height
  97.       return if bw <= 0 or bh <= 0
  98.       if $game_system.movie_info.width_max > 0 and $game_system.movie_info.height_max > 0
  99.         zoom_w = $game_system.movie_info.width_max.to_f / bw.to_f
  100.         zoom_h = $game_system.movie_info.height_max.to_f / bh.to_f
  101.         zoom = [zoom_w, zoom_h].min
  102.       end
  103.       self.zoom_x = zoom
  104.       self.zoom_y = zoom
  105.     end

  106.     # 表示位置変更
  107.     def fix_position
  108.       self.x = $game_system.movie_info.x
  109.       self.y = $game_system.movie_info.y
  110.       self.z = $game_system.movie_info.z
  111.       if $game_system.movie_info.origin_center
  112.         self.ox = self.bitmap.width / 2
  113.         self.oy = self.bitmap.height / 2
  114.       end
  115.       change_zoom()
  116.     end
  117.    
  118.     def update
  119.       if (self.visible = RGDS.visible)
  120.         if RGDS.bitmap_changed? or self.bitmap.disposed?
  121.           self.bitmap = RGDS.bitmap
  122.           fix_position()
  123.           RGDS.bitmap_changed = false
  124.           $game_system.movie_info.refresh_flag = false
  125.         elsif $game_system.movie_info.refresh_flag
  126.           fix_position()
  127.           $game_system.movie_info.refresh_flag = false
  128.         end
  129.       end
  130.       super
  131.     end
  132.   end

  133.   module_function

  134.   # ■ 動画をオープンします。初回は1~2秒ほどかかる場合もあります。
  135.   def open(filename)
  136.     RGDS.open(filename)
  137.   end
  138.   
  139.   # ■ 動画を停止しクローズします。
  140.   def close
  141.     RGDS.close()
  142.   end
  143.   
  144.   # ■ openされた動画を再生します。一時停止中なら再開します。
  145.   # 再生が終わると自動的にクローズします。
  146.   def run
  147.     RGDS.run()
  148.   end
  149.   
  150.   # ■ 動画を一時停止します。再開はrunで行います。
  151.   def pause
  152.     RGDS.pause()
  153.   end

  154.   # ■ 動画をオープンして自動再生します。
  155.   #- 決定キーでスキップします。
  156.   def start_movie(filename, option={})
  157.    
  158.     # スキップ検出オプション
  159.     if option.key?(:skip_sw)
  160.       skip_sw = option[:skip_sw].to_i
  161.     else
  162.       skip_sw = 0
  163.     end
  164.    
  165.     # スキップ禁止モードオプション
  166.     if option.key?(:nsm)
  167.       nsm_mode = option[:nsm]
  168.     else
  169.       nsm_mode = false
  170.     end
  171.    
  172.     if skip_sw > 0
  173.       $game_switches[skip_sw] = true
  174.     end
  175.     scene_temp = SceneManager.scene
  176.     if scene_temp.is_a?(Scene_Map) or scene_temp.is_a?(Scene_Battle)
  177.       msgv = SceneManager.scene.instance_variable_get(:@message_window)
  178.       msgv.update
  179.       tempv = msgv.visible
  180.       msgv.visible = false
  181.       # オープン
  182.       RGDS.open(filename)
  183.       RGDS.run()
  184.       # 終了またはボタンが押されるまでループ
  185.       loop do
  186.         break if scene_temp != SceneManager.scene

  187.         # 画面の更新
  188.         if SceneManager.scene.is_a?(Scene_Map)
  189.           SceneManager.scene.update_for_fade
  190.         else
  191.           SceneManager.scene.update_basic
  192.         end
  193.         
  194.         if !RGDS.active? # 再生終了
  195.           if skip_sw > 0
  196.             $game_switches[skip_sw] = false
  197.           end
  198.           break
  199.         end
  200.         unless nsm_mode
  201.           if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  202.             break
  203.           end
  204.         end
  205.       end
  206.       RGDS.close()
  207.       msgv.visible = tempv
  208.     end
  209.   end
  210.   

  211.   # ■ 以降の表示位置、サイズを指定します。
  212.   #- x, y: 表示座標
  213.   #- width_max, height_max: 表示枠。この内部に収まるように拡大縮小します。
  214.   #                       : どちらかが0以下の場合拡大縮小は行われません。
  215.   #- origin: 表示位置基準点 false: 動画の左上, true: 動画の中心を上記
  216.   #-         の[x,y]にあわせます
  217.   def set_position(x=0,y=0,width_max=0,height_max=0,origin=false)
  218.     $game_system.movie_info.set_position(x,y,width_max,height_max,origin)
  219.   end
  220.   
  221.   # ■ 以降の表示位置、サイズをデフォルトに戻します。
  222.   # 拡大縮小なし、中央にあわせて表示
  223.   def reset_position
  224.     $game_system.movie_info.reset_position()
  225.   end
  226.   
  227.   # 再生音量取得
  228.   def get_volume
  229.     return RGDS.get_volume()
  230.   end

  231.   # 再生音量設定
  232.   def set_volume(volume)
  233.     return RGDS.set_volume(volume)
  234.   end
  235.   
  236. end

  237. class Game_System
  238.   def init_movie_info
  239.     @movie_info = RGDS_SP::MovieInfo.new
  240.   end
  241.   def movie_info
  242.     init_movie_info() if @movie_info.nil?
  243.     return @movie_info
  244.   end
  245. end


  246. class Spriteset_Map
  247.   alias :_hn_movie__initialize :initialize unless private_method_defined?(:_hn_movie__initialize)
  248.   def initialize
  249.     # 元の処理
  250.     _hn_movie__initialize
  251.     # 追加処理
  252.     create_movie
  253.     update_movie
  254.   end

  255.   alias :_hn_movie__dispose :dispose unless method_defined?(:_hn_movie__dispose)
  256.   def dispose
  257.     dispose_movie
  258.     _hn_movie__dispose
  259.   end

  260.   alias :_hn_movie__update :update unless method_defined?(:_hn_movie__update)
  261.   def update
  262.     update_movie
  263.     _hn_movie__update
  264.   end

  265.   # ■ シーン移行時に動画を待機モードにします。
  266.   def create_movie
  267.     @sp_movie = RGDS_SP::MovieSprite.new()
  268.     @sp_movie.viewport = @viewport1
  269.     RGDS.system_resume
  270.   end

  271.   # ■ シーン移行時に動画を待機モードにします。
  272.   def dispose_movie
  273.     RGDS.system_pause
  274.     @sp_movie.viewport = nil
  275.     @sp_movie.dispose
  276.     @sp_movie = nil
  277.   end

  278.   def update_movie
  279.     if RGDS.active?
  280.       RGDS.update
  281.     end
  282.     @sp_movie.update unless @sp_movie.nil?
  283.   end
  284. end

  285. class Spriteset_Battle
  286.   alias :_hn_movie__initialize :initialize unless private_method_defined?(:_hn_movie__initialize)
  287.   def initialize
  288.     # 元の処理
  289.     _hn_movie__initialize
  290.     # 追加処理
  291.     create_movie
  292.     update_movie
  293.   end

  294.   alias :_hn_movie__dispose :dispose unless method_defined?(:_hn_movie__dispose)
  295.   def dispose
  296.     dispose_movie
  297.     _hn_movie__dispose
  298.   end

  299.   alias :_hn_movie__update :update unless method_defined?(:_hn_movie__update)
  300.   def update
  301.     update_movie
  302.     _hn_movie__update
  303.   end

  304.   # ■ シーン移行時に動画を待機モードにします。
  305.   def create_movie
  306.     @sp_movie = RGDS_SP::MovieSprite.new()
  307.     @sp_movie.viewport = @viewport1
  308.     RGDS.system_resume
  309.   end

  310.   # ■ シーン移行時に動画を待機モードにします。
  311.   def dispose_movie
  312.     RGDS.system_pause
  313.     @sp_movie.viewport = nil
  314.     @sp_movie.dispose
  315.     @sp_movie = nil
  316.   end

  317.   def update_movie
  318.     if RGDS.active?
  319.       RGDS.update
  320.     end
  321.     @sp_movie.update unless @sp_movie.nil?
  322.   end
  323. end
复制代码
  1. =begin
  2. ■ RGDS_OP_Movie ver 0.0.1.0
  3. RGDS_base, RGDS_SP より下に配置してください

  4. =end
  5. class Scene_OpeningMovie < Scene_Base
  6.   MOVIE_FILE = "Movies/opening.mpg"
  7.   NSM = false
  8.   #--------------------------------------------------------------------------
  9.   # ● メイン処理
  10.   #--------------------------------------------------------------------------
  11.   def main
  12.     if $BTEST                         # 戦闘テストの場合
  13.       $scene = next_scene()
  14.     else                              # 通常のプレイの場合
  15.       super                           # 本来のメイン処理
  16.     end
  17.   end
  18.   
  19.   def next_scene
  20.     Scene_Title.new
  21.   end
  22.   
  23.   def start
  24.     $game_temp          = Game_Temp.new
  25.     $game_system        = Game_System.new
  26.     RGDS.open(MOVIE_FILE)
  27.     @movie_sprite = RGDS_SP::MovieSprite.new
  28.     super
  29.   end
  30.   
  31.   def post_start
  32.     super
  33.     RGDS.run
  34.   end
  35.   
  36.   def update
  37.     super
  38.     RGDS.update
  39.     @movie_sprite.update
  40.     if !RGDS.active? # 再生終了
  41.       SceneManager.goto(Scene_Title)
  42.       return
  43.     end
  44.     unless NSM
  45.       if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  46.         SceneManager.goto(Scene_Title)
  47.         return
  48.       end
  49.     end
  50.   end

  51.   def pre_terminate
  52.     RGDS.close()
  53.     @movie_sprite.dispose
  54.     super
  55.   end
  56. end

  57. module SceneManager
  58.   #--------------------------------------------------------------------------
  59.   # ● 最初のシーンクラスを取得
  60.   #--------------------------------------------------------------------------
  61.   def self.first_scene_class
  62.     $BTEST ? Scene_Battle : Scene_OpeningMovie
  63.   end
  64. end
复制代码

[box=DarkRed]-教程-[/box]

教程[box=DarkRed]在你要发亮的事件设置
搜狗截图_2014-10-04_21-04-32.png

然后在那事件的第二页设置成这么样
搜狗截图_2014-10-04_21-05-04.png

设置进入你想要发亮的地区
搜狗截图_2014-10-04_21-06-36.png

设置离开你想要发亮的地区
搜狗截图_2014-10-04_21-07-03.png [/box]


[box=DarkRed]-素材-[/box]

素材此压缩文件到您的Graphics内的Pictures里解压
Pictures.zip (82.96 KB, 下载次数: 10)

这个直接到您的工程文件解压就好了
在游戏文件解压.zip (1.27 MB, 下载次数: 14)


[box=DarkRed]-狂炎对楼主说的话-[/box]
要加油,别浪费我们细心的帮你找来的素材

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 别把脚本也居中了啊(O

查看全部评分

神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦神烦
回复

使用道具 举报

梦石
0
星屑
50
在线时间
36 小时
注册时间
2014-10-3
回帖
45
 楼主| 发表于 2014-10-4 21:26:26 | 显示全部楼层
永燃的狂炎 发表于 2014-10-4 21:22
-脚本-[/box]-教程-[/box]

在你要发亮的事件设置

感谢啊,大神
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部