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

Project1

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

[已经解决] 请问怎么样用开关控制脚本是否启用?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1724
在线时间
542 小时
注册时间
2014-9-28
帖子
43

开拓者

跳转到指定楼层
1
发表于 2017-9-2 20:47:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
是这样的,为了能够实现附带横版小游戏的多帧效果,我用了@rmav 的多帧脚本。可是,假如我用在正常的游戏流程(非附带的横版的小游戏)里,却发现会有很多奇奇怪怪的bug……所以,我希望能用开关控制这个脚本的开启/关闭!之前曾经试过直接在开头加 lf game_switches[250] = =true,然后在下面直接放上脚本……但果然还是不行。
所以,我就来这儿请教一下各位大神该怎么办……如有疏忽请见谅!
现附上脚本原文,恳请各位大神帮帮我!

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. #   ■ 多帧4_8方图,4_8向行走
  4. #
  5. #   支持4方图:兼容rmVA原格式图片,4向8向行走
  6. #   支持8方图:从上到下方向为:正、左、右、背、左下、右下、左上、右上
  7. #             对应小键盘:24681379
  8. #   支持开火车,有一定范围的拥挤处理。支持4、8方混合开
  9. #   按住方向键时,碰到障碍物会踏步(可选)
  10. #   可选4、8向行走,在代码开头设置,默认为8向行走
  11. #------------------------------------------------------------------------------
  12. #使用说明:(在编辑器中设置行走图时,有个白框必须放在左上角)
  13. #         对原rmVA不支持的格式,需要对文件名实行命名规则
  14. #         1.png图片,须仅包含一个人物的全套行走
  15. #         2.图片内容,从左到右,小于99帧;
  16. #                    从上到下8个方向:正、左、右、背、左下、右下、左上、右上
  17. #         3.文件命名
  18. #           文件名:角色名+格式串+.png
  19. #                  name@D#DD%DD.png   其中%DD可选
  20. #          @D表示png文件中, 每一列有多少个图。以一位数表示,如8,即8个方向
  21. #          #DD表示png文件中,每一行有多少个图。以两位数表示,如06或6,即6帧
  22. #          %DD,可选,调整角色在游戏画面中的高度,单位像素。如20,即调低20像素
  23. #          说明:因为如果是精美8方图的话,一般有带阴影,而阴影会比脚低
  24. #                这时可通过%DD来调整人物在画面中的高低
  25. #                有些图片空白过多,也可用此来调整,不用弄PS。
  26. #
  27. #小技巧:★可新建一个工程,以RMVA默认的角色领队开火车,可看出是否对齐
  28. #        ★若人物在开火车中挤紧在一起,把其每帧的图片加宽,如>=68像素即可。
  29. #        ★把文件命名为name@1#DD%DD.png,可作为单行图移动或放事件中播放动画
  30. #注意:  ☆rmVA原格式行走图,停下来会停在第2帧(这是rmVA的默认方法)
  31. #        ☆自定义格式行走图,停下来会停在第1帧
  32. #        ☆格式串前的name必须在characters文件夹下的所有png文件中唯一
  33. #        ☆行走图的每一帧之间必须高度相等、宽度相等
  34. #      ☆☆没用到的功能关闭掉,以降低冲突及避免无谓的效率影响
  35. #------------------------------------------------------------------------------
  36. #  by rmav (有任何问题请毫无顾忌滴提出)
  37. #
  38. #   v1.09 配合跑步插件更新
  39. #==============================================================================
  40. $imported ||= {}
  41. $imported[:rmav_walk] = 20140204.1
  42. module Rmav
  43.   #---------行走选项设置---------#
  44. Opt_walk={
  45.       dir8_on:     false,     #false则4向行走,本插件系列其他功能仍可以用
  46.       step_ext_on: false,     #按着方向键碰到障碍物踏步,若为false则静止(rmVA默认是静止的)
  47.  
  48.       draw_character: true,  #可在窗口中绘制自定义行走图,若窗口太小会按比例缩小,
  49.                              ##如默认读档界面
  50.  
  51.       encryption: false,     #打包游戏时,是否选择了加密
  52.                              ##若准备加密,那么在打包前,打开此开关并启动一次游戏
  53.                              ##再打包即可
  54.                              ##若没有启用替换图片功能或待机或跑步功能,可不用管
  55.  
  56.       wait_run_enable: true  #是否使用了待机跑步子插件
  57.       }
  58.  
  59.  
  60.   INPUT_HV=[[0,0],[4,2],[0,2],[6,2],[4,0],[0,0],[6,0],[4,8],[0,8],[6,8]]
  61.   Dirs=[1,2,3,4,6,7,8,9]
  62.  
  63.  
  64.   #--------------------------------------------------------------------------
  65.   # ● 缓存文件夹中所有png文件名
  66.   #--------------------------------------------------------------------------
  67.   def self.loadFolder(folderName,custom=true)
  68.     @cache_folder||={}
  69.     folderName.gsub!(/\\/,'/')
  70.     folderName+='/' if folderName[-1]!='/'
  71.     folderName.downcase!
  72.     unless @cache_folder.include?(folderName)
  73.       @cache_folder[folderName]=[]
  74.       Dir.glob(folderName+"*.png"){|f|
  75.         file_name=f.split('/')[-1].chomp!('.png')
  76.         if custom
  77.           if file_name.match(/\@\d{1,2}\#\d{1,2}/)
  78.             @cache_folder[folderName]<<file_name
  79.           end
  80.         else
  81.           @cache_folder[folderName]<<file_name
  82.         end
  83.       }
  84.     end
  85.     @cache_folder[folderName]   
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 分类存储待机图、跑步图
  89.   #--------------------------------------------------------------------------
  90.   CharNames||={wait: {}, run: {}}
  91.   def self.charFolder_map
  92.     self.loadFolder("Graphics/Characters/").each{|f|
  93.         f=~%r{(.+)_([wr])\@\d{1,2}\#\d{1,2}(\%\d{1,2})?}
  94.         if $1&&$2
  95.           case $2
  96.             when "w";CharNames[:wait][$1]=f
  97.             when "r";CharNames[:run][$1]=f
  98.           end
  99.         end
  100.     }
  101.  
  102.   end
  103.  
  104. end
  105.  
  106. class Sprite_Character  
  107.   #--------------------------------------------------------------------------
  108.   # ● 设置角色的位图(n方向,n帧)
  109.   #--------------------------------------------------------------------------
  110.   alias_method :set_character_bitmap_org_rmav, :set_character_bitmap
  111.   def set_character_bitmap
  112.     self.bitmap = Cache.character(@character_name)
  113.     @fmt_sign = @character_name[/\@(\d{1,2})\#(\d{1,2})(?:\%(\d{1,2}))?/]      
  114.     if @fmt_sign
  115.       @fmt_sign=[$1.to_i,$2.to_i,$3.to_i]
  116.  
  117.       @cw = bitmap.width / @fmt_sign[1]   
  118.       @ch = bitmap.height / @fmt_sign[0]  
  119.       self.ox = @cw / 2
  120.       self.oy = @ch-@fmt_sign[2]  
  121.     else
  122.       set_character_bitmap_org_rmav
  123.     end
  124.  
  125.     if @character
  126.       @character.cw=@cw
  127.       @character.ch=@ch
  128.       @character.fmt_sign=@fmt_sign
  129.       @character.original_pattern=0 if @fmt_sign
  130.     end
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 更新源矩形
  134.   #--------------------------------------------------------------------------
  135.   def update_src_rect
  136.     if @tile_id == 0
  137.       index = @character.character_index
  138.       pattern = @character.pattern < (@fmt_sign?@fmt_sign[1]:3) \
  139.                 ? @character.pattern : 1
  140.       sx = (index % 4 * 3 + pattern) * @cw
  141.       sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  142.  
  143.       case @character.direction
  144.         when 1; sy=@fmt_sign?(@fmt_sign[0]==4?0:4)*@ch:(index / 4 * 4 ) * @ch
  145.         when 3; sy=@fmt_sign?(@fmt_sign[0]==4?0:5)*@ch:(index / 4 * 4 ) * @ch
  146.         when 7; sy=@fmt_sign?(@fmt_sign[0]==4?3:6)*@ch:(index / 4 * 4+3 ) * @ch
  147.         when 9; sy=@fmt_sign?(@fmt_sign[0]==4?3:7)*@ch:(index / 4 * 4+3 ) * @ch
  148.       end
  149.       sy=0 if @fmt_sign&&@fmt_sign[0]==1  
  150.       self.src_rect.set(sx, sy, @cw, @ch)
  151.     end
  152.   end
  153.  
  154. end
  155.  
  156.  
  157.  
  158.  
  159. class Game_Player
  160. if Rmav::Opt_walk[:dir8_on]
  161.   #--------------------------------------------------------------------------
  162.   # ● 由方向键移动,8方向
  163.   #--------------------------------------------------------------------------
  164.   def move_by_input
  165.     return if !movable? || $game_map.interpreter.running?
  166.     input=Input.dir8
  167.     move_diagonal(*Rmav::INPUT_HV[input]) if input > 0
  168.   end
  169. end
  170.  
  171.   #--------------------------------------------------------------------------
  172.   # ● 更新步行/踏步动画
  173.   #--------------------------------------------------------------------------
  174.   #alias_method :update_animation_org_rmav,:update_animation
  175.   def update_animation
  176.     if stopping? && @stop_count<1 && Rmav::Opt_walk[:step_ext_on]
  177.       @step_ext_anime=true
  178.     else
  179.       @step_ext_anime=false
  180.     end
  181.     super
  182.   end
  183. end
  184.  
  185.  
  186.  
  187. class Game_CharacterBase
  188.   attr_accessor :cw,:ch,:fmt_sign,:original_pattern,:step_ext_anime
  189.   alias_method :characterBase_init_org_rmav, :initialize
  190.   def initialize
  191.     characterBase_init_org_rmav
  192.     @cw=@ch=0
  193.     @fmt_sign=nil
  194.     @step_ext_anime=false
  195.   end
  196.  
  197.   #--------------------------------------------------------------------------
  198.   # ● 斜向移动
  199.   #     horz : 横向(4 or 6)
  200.   #     vert : 纵向(2 or 8)
  201.   #--------------------------------------------------------------------------
  202.   alias_method :move_diagonal_org_charBase_rmav, :move_diagonal
  203.   def move_diagonal(horz, vert, turn_ok = true)
  204.  
  205.     @move_succeed = diagonal_passable?(x, y, horz, vert)
  206.     if @move_succeed
  207.       set_direction(Rmav::INPUT_HV.index([horz, vert]))
  208.       @x = $game_map.round_x_with_direction(@x, horz)
  209.       @y = $game_map.round_y_with_direction(@y, vert)
  210.       @real_x = $game_map.x_with_direction(@x, reverse_dir(horz))
  211.       @real_y = $game_map.y_with_direction(@y, reverse_dir(vert))
  212.       increase_steps
  213.     elsif turn_ok
  214.       set_direction(Rmav::INPUT_HV.index([horz, vert]))
  215.       check_event_trigger_touch_front
  216.     end
  217.  
  218.   end
  219.  
  220.  
  221.   #--------------------------------------------------------------------------
  222.   # ● 更新动画图案
  223.   #--------------------------------------------------------------------------
  224.   def update_anime_pattern
  225.     if (!@step_anime && @stop_count > 0) ||
  226.       (!@step_anime && stopping? && !@step_ext_anime)
  227.       @pattern = @original_pattern
  228.     else
  229.       @pattern = (@pattern + 1) % (@fmt_sign?@fmt_sign[1]:4)
  230.     end
  231.   end
  232.  
  233.   #--------------------------------------------------------------------------
  234.   # ● 更新动画计数
  235.   #--------------------------------------------------------------------------
  236.   alias_method :update_anime_count_org_rmav,:update_anime_count
  237.   def update_anime_count
  238.     if Rmav::Opt_walk[:step_ext_on] && !(moving? && @walk_anime) && @step_ext_anime
  239.       @anime_count += 1      
  240.     else
  241.       update_anime_count_org_rmav
  242.     end
  243.   end
  244.  
  245.  
  246. end
  247.  
  248.  
  249.  
  250. class Game_Follower
  251.   attr_accessor :gathering
  252.   alias_method :follower_initialize_org_rmav, :initialize
  253.   def initialize(member_index, preceding_character)
  254.     follower_initialize_org_rmav(member_index, preceding_character)
  255.     @gathering=false
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 追随带队角色
  259.   #--------------------------------------------------------------------------
  260. def chase_preceding_character
  261.     unless moving?
  262.       sx = distance_x_from(@preceding_character.x)
  263.       sy = distance_y_from(@preceding_character.y)
  264.  
  265.       dx_pix=[(@preceding_character.cw+@cw)/2, 79].min
  266.  
  267.       if !@gathering && dx_pix > sx.abs*32+16
  268.         if sy>0
  269.           return  if (@ch>32+16&&sy<2)
  270.         elsif sy<0
  271.           return if (@preceding_character.ch>32+16&&sy.abs<2)
  272.         else
  273.           return
  274.         end        
  275.       end
  276.  
  277.       if sx != 0 && sy != 0
  278.         move_diagonal(sx > 0 ? 4 : 6, sy > 0 ? 8 : 2)
  279.       elsif sx != 0
  280.         move_straight(sx > 0 ? 4 : 6)
  281.       elsif sy != 0
  282.         move_straight(sy > 0 ? 8 : 2)
  283.       end
  284.     end
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● 更新画面
  288.   #--------------------------------------------------------------------------
  289.   alias_method :update_org_rmav,:update
  290.   def update
  291.     @step_ext_anime = $game_player.step_ext_anime
  292.     @stop_count=0  if @step_ext_anime
  293.     update_org_rmav
  294.   end
  295. end
  296.  
  297.  
  298. class Game_Followers
  299.   #--------------------------------------------------------------------------
  300.   # ● 集合
  301.   #--------------------------------------------------------------------------
  302.   alias_method :gather_org_rmav,:gather
  303.   def gather
  304.     gather_org_rmav
  305.     visible_folloers.each {|follower| follower.gathering=true }
  306.   end
  307.  
  308.   #--------------------------------------------------------------------------
  309.   # ● 判定是否集合完毕
  310.   #--------------------------------------------------------------------------
  311.   alias_method :gather_org_rmav?,:gather?
  312.   def gather?
  313.     ok = gather_org_rmav?
  314.     if ok
  315.       visible_folloers.each {|follower| follower.gathering=false }
  316.     end
  317.     ok
  318.   end
  319. end
  320.  
  321. if Rmav::Opt_walk[:draw_character]
  322. class Window_Base
  323.   #--------------------------------------------------------------------------
  324.   # ● 绘制人物行走图
  325.   #--------------------------------------------------------------------------
  326.   alias_method :draw_character_org_rmav,:draw_character
  327.   def draw_character(character_name, character_index, x, y,align=true)
  328.                                                           #align是否依据%DD调整
  329.     return unless character_name   
  330.     bitmap = Cache.character(character_name)
  331.     fmt_sign = character_name[/\@(\d{1,2})\#(\d{1,2})(\%(\d{1,2}))?/]      
  332.     if fmt_sign
  333.       fmt_sign=[$1.to_i,$2.to_i,$4.to_i]
  334.  
  335.       cw = bitmap.width / fmt_sign[1]   
  336.       ch = bitmap.height / fmt_sign[0]  
  337.       ch1=(align)?(ch-fmt_sign[2]):(ch)
  338.  
  339.       ch2=(ch1>=contents_height)?(contents_height):(ch1)
  340.       cw2=(cw>=contents_width)?(contents_width):(cw)
  341.  
  342.       dh=ch2.fdiv ch1
  343.       dw=cw2.fdiv cw
  344.  
  345.       if dh<dw        
  346.        cw2=cw*ch2/ch1
  347.       elsif dh>dw
  348.        ch2=ch1*cw2/cw
  349.       end
  350.       y1=(align)?(fmt_sign[2]*[dh,dw].min):0
  351.       src_rect = Rect.new(0, 0, cw, ch)
  352.       dst_rect = Rect.new(x - cw2 / 2, y - ch2,cw2,ch2+y1)
  353.       contents.stretch_blt(dst_rect, bitmap, src_rect)
  354.     else
  355.       draw_character_org_rmav(character_name, character_index, x, y)
  356.     end
  357.  
  358.   end
  359.  
  360. end
  361. end
  362.  
  363. if Rmav::Opt_walk[:encryption]
  364.     if Dir.glob("*.rgss3a").size<1
  365.       files_tmp=Rmav.loadFolder("Graphics/Characters/")
  366.       File.open("Graphics/Characters/characters.rmav","wb"){|f|
  367.         Marshal.dump(files_tmp,f)
  368.       }
  369.     end
  370.     def Rmav.loadFolder(folderName)
  371.       @cache_folder||={}
  372.       folderName.gsub!(/\\/,'/')
  373.       folderName+='/' if folderName[-1]!='/'
  374.       folderName.downcase!
  375.       unless @cache_folder.include?(folderName)        
  376.         if folderName[/characters\//]
  377.           @cache_folder[folderName]=load_data(\
  378.           "Graphics/Characters/characters.rmav")
  379.         else
  380.           @cache_folder[folderName]=[]
  381.         end
  382.       end
  383.       @cache_folder[folderName]
  384.  
  385.    end
  386. end
  387.  
  388. class Game_Character
  389. if Rmav::Opt_walk[:dir8_on]
  390.   #--------------------------------------------------------------------------
  391.   # ● 随机移动
  392.   #--------------------------------------------------------------------------
  393.   def move_random
  394.     direction=Rmav::Dirs[rand(8)]
  395.     move_diagonal(*Rmav::INPUT_HV[direction],false)
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● 接近人物
  399.   #--------------------------------------------------------------------------
  400.   def move_toward_character(character)
  401.     sx = distance_x_from(character.x)
  402.     sy = distance_y_from(character.y)
  403.      o=5
  404.      o-=1 if sx>0
  405.      o+=1 if sx<0
  406.      o-=3 if sy<0
  407.      o+=3 if sy>0
  408.  
  409.     move_diagonal(*Rmav::INPUT_HV[o]) if sx!=0 && sy!=0
  410.     if !@move_succeed && o!=5
  411.       if sx.abs > sy.abs
  412.         move_straight(sx > 0 ? 4 : 6)
  413.         move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
  414.       elsif sy != 0
  415.         move_straight(sy > 0 ? 8 : 2)
  416.         move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
  417.       end
  418.     end
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ● 远离人物
  422.   #--------------------------------------------------------------------------
  423.   def move_away_from_character(character)
  424.     sx = distance_x_from(character.x)
  425.     sy = distance_y_from(character.y)
  426.     if sx.abs > sy.abs
  427.       move_straight(sx > 0 ? 6 : 4)
  428.       move_straight(sy > 0 ? 2 : 8) if !@move_succeed && sy != 0
  429.     elsif sy != 0
  430.       move_straight(sy > 0 ? 2 : 8)
  431.       move_straight(sx > 0 ? 6 : 4) if !@move_succeed && sx != 0
  432.     end
  433.   end
  434.   #--------------------------------------------------------------------------
  435.   # ● 前进一步
  436.   #--------------------------------------------------------------------------
  437.   def move_forward
  438.        move_diagonal(*Rmav::INPUT_HV[@direction])
  439.   end
  440.   #--------------------------------------------------------------------------
  441.   # ● 后退一步
  442.   #--------------------------------------------------------------------------
  443.   def move_backward
  444.     last_direction_fix = @direction_fix
  445.     @direction_fix = true
  446.     move_diagonal(*Rmav::INPUT_HV[reverse_dir(@direction)], false)
  447.     @direction_fix = last_direction_fix
  448.   end
  449. end  
  450.  
  451. end
  452.  
  453. if Rmav::Opt_walk[:wait_run_enable]
  454. module Cache
  455. class <<self
  456.   alias_method :character_org_rmav,:character
  457.   def character(filename)
  458.     if $imported[:rmav_walk_wait]||$imported[:rmav_walk_run]
  459.       unless Cache.include?("Graphics/Characters/"+filename)
  460.         filename=~%r{(.+)\@\d{1,2}\#\d{1,2}}
  461.         if $1
  462.           base=$1.sub(/_[wr]\z/,'')
  463.           w=Rmav::CharNames[:wait][base] if $imported[:rmav_walk_wait]
  464.           r=Rmav::CharNames[:run][base] if $imported[:rmav_walk_run]
  465.           character_org_rmav(filename)
  466.           character_org_rmav(w) if w
  467.           character_org_rmav(r) if r
  468.  
  469.         end
  470.       end
  471.     end
  472.     character_org_rmav(filename)  
  473.   end
  474. end
  475. end
  476.  
  477. Rmav.charFolder_map
  478. end
毁掉一张图的最好方式就是把它用作头像(逃)

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2017-9-2 21:05:56 | 只看该作者
本帖最后由 taroxd 于 2017-9-2 21:08 编辑

除非脚本本身提供这个功能,否则没有简单的办法可以做到

大概的做法是把脚本每个更改的方法中都加上一个判断,即

if $game_variables[xx]
  脚本更改后的内容
else
  脚本更改前的内容
end

而且即使这样做也很可能在开关的时候出一些奇怪的 bug。

点评

是……是吗,太遗憾了。可我翻遍整个论坛也只有这个多帧脚本了……  发表于 2017-9-2 21:09

评分

参与人数 1星屑 +15 收起 理由
迷失炎 + 15 我先试试看!

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 19:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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