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

Project1

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

[已经过期] 这次来问【一个有点难口述的问题】和【一个残留的问题】

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
32 小时
注册时间
2016-6-23
帖子
24
跳转到指定楼层
1
发表于 2016-12-30 23:23:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 RaidenInfinity 于 2016-12-30 23:35 编辑

大家好,我是音无。

今天想问的问题有两个——

1.一个有点难口述的问题:
大概是之前有一个坛友问过的——人物走几帧会卡顿。我这儿的情况是走到地图的某一个固定位置,就会在某一帧突然肉眼可见的人物向前平移了一小格(但是因为只是一瞬间所以难以截图),到了下一帧恢复正常。只会在某些特定的位置出现,不是随机出现的(奔跑和走动均有出现,奔跑时明显)。

听说是要用到1.1的官方补丁,但是找不到啊——

如果实在不行,我只能换台电脑重新建工程了(手头目前只有这台常用的台式机Orz)......

2.(似乎是)一个上次没有解决干净的问题(?):
上次发帖说到pop message和半身像的冲突,版主很给力地解决了我的疑难,在此再一次感谢版主!

这次的问题个半身像还是有关——

算不算是地图缩放脚本和半身像脚本的冲突?

画地图时背景是透明的,出现的问题如图所示Orz

地图缩放脚本:

RUBY 代码复制
  1. #==============================================================================
  2. # ■ RGSS3 マップズーム Ver1.00 by 星潟
  3. # ■ RGSS3 地图缩放 Ver1.00 by 星潟      翻译:戏蹑群星斗
  4. #------------------------------------------------------------------------------
  5. #地图缩放。就是这样。
  6. #由于缩放状态保存的数据将被保留(就是存档会保留缩放)。请注意
  7. #==============================================================================
  8. # 使用事件命令的脚本。
  9. #------------------------------------------------------------------------------
  10. # map_zoom(150)
  11. #
  12. # 在这种情况下,它会放大到150%。
  13. #------------------------------------------------------------------------------
  14. # map_zoom(300)
  15. #
  16. # 在这种情况下,它会放大到300%。
  17. #------------------------------------------------------------------------------
  18. # map_zoom
  19. #
  20. # 在这种情况下,放大解除。
  21. #==============================================================================
  22. # 100未満のズーム(縮小)や2000%を超えるのズームには制限をかけてあります。
  23. # 因此,100是最小值,最大值2000。
  24. #==============================================================================
  25. class Game_System
  26.   attr_accessor :zoom_mode
  27.   #--------------------------------------------------------------------------
  28.   # ズームモード
  29.   #--------------------------------------------------------------------------
  30.   def zoom_mode
  31.     @zoom_mode ||= 100
  32.   end
  33. end
  34. class Spriteset_Map
  35.   #--------------------------------------------------------------------------
  36.   # ビューポートの作成
  37.   #--------------------------------------------------------------------------
  38.   alias create_viewports_zoommap create_viewports
  39.   def create_viewports
  40.     create_viewports_zoommap
  41.     @zoommap = ZoomMap.new(@viewport1,@viewport2)
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # 更新処理
  45.   #--------------------------------------------------------------------------
  46.   alias update_zoommap update
  47.   def update
  48.     @zoommap.update
  49.     update_zoommap
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # 解放処理
  53.   #--------------------------------------------------------------------------
  54.   alias dispose_zoommap dispose
  55.   def dispose
  56.     @zoommap.dispose
  57.     dispose_zoommap
  58.   end
  59. end
  60. class ZoomMap < Sprite_Base
  61.   #--------------------------------------------------------------------------
  62.   # 初期化
  63.   #--------------------------------------------------------------------------
  64.   def initialize(v1,v2)
  65.     super(v2)
  66.     @viewport_data = v1
  67.     @zoom_rate = $game_system.zoom_mode
  68.     @zoom_bitmap = nil
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # 解放
  72.   #--------------------------------------------------------------------------
  73.   def dispose
  74.     @zoom_bitmap.dispose if @zoom_bitmap && !@zoom_bitmap.disposed?
  75.     super
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # 更新処理
  79.   #--------------------------------------------------------------------------
  80.   def update
  81.     self.visible = @zoom_rate != 100
  82.     @zoom_bitmap.dispose if @zoom_bitmap && !@zoom_bitmap.disposed?
  83.     if $game_system.zoom_mode != 100 or @zoom_rate != 100
  84.       if @zoom_rate != $game_system.zoom_mode
  85.         d = (@zoom_rate - $game_system.zoom_mode).to_i
  86.         case d
  87.         when 0..9;i = 1
  88.         when 10..99;i = 2
  89.         when 100..999;i = 3
  90.         else; i = 4
  91.         end
  92.         @zoom_rate += (@zoom_rate < $game_system.zoom_mode) ? i : -i
  93.       end
  94.       zm = @zoom_rate.to_f / 100
  95.       @viewport_data.z += 10000000
  96.       @zoom_bitmap = Graphics.snap_to_bitmap
  97.       self.bitmap = @zoom_bitmap
  98.       w = self.bitmap.width
  99.       h =self.bitmap.height
  100.       self.ox = [[0,((w * zm / 2) - w / 2) / zm + (($game_player.screen_x - w / 2).to_f)].max,(w * zm - w) / zm].min
  101.       self.oy = [[0,((h * zm / 2) - h / 2) / zm + (($game_player.screen_y - 16 - h / 2).to_f)].max,(h * zm - h) / zm].min
  102.       self.zoom_x = zm
  103.       self.zoom_y = zm
  104.       self.visible = true
  105.       @viewport_data.z -= 10000000
  106.     end
  107.     super
  108.   end
  109. end
  110. class Game_Interpreter
  111.   #--------------------------------------------------------------------------
  112.   # ズーム
  113.   #--------------------------------------------------------------------------
  114.   def map_zoom(rate = 100)
  115.     $game_system.zoom_mode = [[rate,100].max,2000].min
  116.   end
  117. end


半身像脚本:

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ 半身像对话框 by LBQ
  4. #------------------------------------------------------------------------------
  5. #  一个简单的半身像对话框罢了= =
  6. #------------------------------------------------------------------------------
  7. # ■ 用法一览
  8. #     1:如何将半身像应用到游戏中?
  9. #       ——如果想要把一个脸图替换成半身像,则需要找到这个脸图的编号,比如说拉尔
  10. #           夫,就是Actor1的编号0,之后去在Graphics/Busts这个文件夹里面拷贝一个
  11. #           叫做Actor1_0的图像,这个图像会被当做半身像替换原有图像。
  12. #==============================================================================
  13. $imported ||= {}
  14. $imported[:LBQ_Bust]=true
  15.  
  16. module LBQ
  17.   module Bust
  18.     FOLDER="Busts"
  19.     SUB1=[/【/,    "\\{\\c[6]-- "]
  20.     SUB2=[/】/,    " --\\c[0]\\}"]
  21.  
  22.     TEXT_FOR_NEXT="[next]"
  23.     TEXT_FOR_END ="[end]"
  24.  
  25.     INDENT=150 #半身像的缩进
  26.   end
  27. end
  28.  
  29. module Cache
  30.   def self.busts(filename)
  31.     load_bitmap("Graphics/#{LBQ::Bust::FOLDER}/", filename)
  32.   end
  33. end
  34.  
  35.  
  36.  
  37. class Sprite_Bust < Sprite_Base
  38.   attr_accessor   :bust_graphics
  39.   attr_accessor   :status
  40.  
  41.   def initialize(vp=nil)
  42.     super(vp)
  43.     @bust_graphics=nil
  44.     @status=:nothing
  45.   end
  46.  
  47.   def slide_in
  48.     @status=:sliding_in
  49.   end
  50.  
  51.   def slide_out
  52.     @status=:sliding_out
  53.     if $game_message.do_not_slide_out
  54.       @status=:slided_out
  55.       set_pos
  56.     end
  57.   end
  58.  
  59.  
  60.  
  61.  
  62.   def set_pos(slide_in=true)
  63.     self.x=0 - self.bitmap.width
  64.     self.y=Graphics.height-self.bitmap.height
  65.  
  66.     self.x=0 unless slide_in
  67.   end
  68.  
  69.  
  70.   def set_graphics(bust_graphics)
  71.     self.bitmap=Cache.busts(bust_graphics)
  72.   end
  73.  
  74.  
  75.  
  76.   def update
  77.     super
  78.     case @status
  79.     when :nothing
  80.       # Do Nothing
  81.     when :sliding_in
  82.       #Slide In
  83.       self.x+=12
  84.       if self.x>=0
  85.         self.x=0
  86.         @status=:slided_in
  87.       end
  88.  
  89.     when :sliding_out
  90.       self.x-=12
  91.       if self.x<= -self.bitmap.width
  92.         self.x= -self.bitmap.width
  93.         @status=:slided_out
  94.       end
  95.       #Slide Out
  96.     when :slided_in
  97.       #Slided in
  98.     when :slided_out
  99.       #Sliede out
  100.     end
  101.  
  102.   end
  103.  
  104.  
  105. end
  106.  
  107.  
  108. class Game_Message
  109.   attr_accessor   :bust_name
  110.   attr_accessor   :bust
  111.   attr_accessor   :have_bust
  112.   attr_accessor   :do_not_slide_out
  113.  
  114.   alias lbq_bust_shot_game_message_init initialize
  115.   def initialize
  116.     lbq_bust_shot_game_message_init
  117.     @bust_name=""
  118.     @bust=nil
  119.     @have_bust=false
  120.     @do_not_slide_out=false
  121.   end
  122.  
  123.  
  124.  
  125.   #--------------------------------------------------------------------------
  126.   # ● 添加内容
  127.   #--------------------------------------------------------------------------
  128.   def add(text)
  129.     new_text=text.gsub(LBQ::Bust::SUB1[0],LBQ::Bust::SUB1[1])
  130.     new_text2=new_text.gsub(LBQ::Bust::SUB2[0],LBQ::Bust::SUB2[1])
  131.     if new_text2.include? LBQ::Bust::TEXT_FOR_NEXT
  132.       new_text2.delete!(LBQ::Bust::TEXT_FOR_NEXT)
  133.       $game_message.do_not_slide_out=true
  134.     end
  135.  
  136.     if new_text2.include? LBQ::Bust::TEXT_FOR_END
  137.       new_text2.delete!(LBQ::Bust::TEXT_FOR_END)
  138.       $game_message.do_not_slide_out=false
  139.     end
  140.     @texts.push(new_text2)
  141.   end
  142. end
  143.  
  144.  
  145.  
  146. class Game_Interpreter
  147.   alias lbq_bust_shot_command_101 command_101
  148.   #--------------------------------------------------------------------------
  149.   # ● 显示文字
  150.   #--------------------------------------------------------------------------
  151.   def command_101
  152.     $game_message.bust=nil
  153.       unless @params[0].empty?
  154.         if File.exist?("Graphics/#{LBQ::Bust::FOLDER}/#{@params[0]}_#{@params[1]}.png")
  155.           $game_message.have_bust=true
  156.         else
  157.           $game_message.have_bust=false
  158.           $game_message.bust_name=""
  159.         end
  160.       end
  161.  
  162.     unless @params[3] == 2
  163.       $game_message.have_bust=false
  164.     end
  165.  
  166.     if $game_message.have_bust
  167.       $game_message.bust_name="#{@params[0]}_#{@params[1]}"
  168.       $game_message.bust=nil
  169.       $game_message.bust=Sprite_Bust.new
  170.       $game_message.bust.set_graphics($game_message.bust_name)
  171.       $game_message.bust.z=99999
  172.       unless $game_message.do_not_slide_out
  173.         $game_message.bust.set_pos
  174.         $game_message.bust.slide_in
  175.       else
  176.         $game_message.bust.set_pos(false)
  177.         $game_message.bust.slide_in
  178.       end
  179.     end
  180.  
  181.     lbq_bust_shot_command_101
  182.     if $game_message.have_bust
  183.         $game_message.bust.slide_out
  184.         Fiber.yield until $game_message.bust.status==:slided_out
  185.     end
  186.     $game_message.have_bust=false
  187.     $game_message.bust_name=""
  188.  
  189.   end
  190.  
  191.  
  192.   alias lbq_bust_int_update update
  193.   def update
  194.     lbq_bust_int_update
  195.     $game_message.bust.update unless $game_message.bust.nil?
  196.   end
  197.  
  198. end
  199.  
  200.  
  201. class Window_Message
  202.   #--------------------------------------------------------------------------
  203.   # ● 获取换行位置
  204.   #--------------------------------------------------------------------------
  205.   def new_line_x
  206.     value=0
  207.     value=112 unless $game_message.face_name.empty?
  208.     unless $game_message.face_name.empty? && $game_message.bust_name.empty?
  209.       value=LBQ::Bust::INDENT
  210.     end
  211.  
  212.     return value
  213.   end
  214. end
  215.  
  216.  
  217. class Window_Message
  218.   #--------------------------------------------------------------------------
  219.   # ● 翻页处理
  220.   #--------------------------------------------------------------------------
  221.   def new_page(text, pos)
  222.     contents.clear
  223.     draw_face($game_message.face_name, $game_message.face_index, 0, 0) if $game_message.bust_name.empty?
  224.     reset_font_settings
  225.     pos[:x] = new_line_x
  226.     pos[:y] = 0
  227.     pos[:new_x] = new_line_x
  228.     pos[:height] = calc_line_height(text)
  229.     clear_flags
  230.   end
  231. end


以上就是问题了,求解!谢谢

QQ截图20161230231815.png (3.4 KB, 下载次数: 20)

QQ截图20161230231815.png

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

2
发表于 2016-12-30 23:56:42 | 只看该作者
第一个问题,我猜的,应该是调过了分辨率?

新的分辨率长宽不是32的整数倍?

又或者是地图大小设定得过小。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
6886
在线时间
7027 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

3
发表于 2016-12-31 00:08:56 | 只看该作者
本帖最后由 RaidenInfinity 于 2016-12-31 00:43 编辑

第一个问题,如果连什么都没有碰过的新工程都卡顿,99%是硬件(电脑)的锅。

如果有碰过分辨率,请确保是32的倍率,不管是宽还是高。
这是因为如果不是32的倍率,地图卷轴的机制会出问题。在靠近地图的边缘尤其会出现这种问题。

第二个问题……我只能感叹…又是日本人写的脚本。
用Graphics.snap_to_bitmap(屏幕截图)这种方式来做地图缩放真是醉得离谱。
这代表地图上不能有界面相关的事物,因为都会被截进去。
所以解决方法:把地图缩放删掉
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
32 小时
注册时间
2016-6-23
帖子
24
4
 楼主| 发表于 2016-12-31 20:04:57 | 只看该作者
本帖最后由 音无梓燚 于 2016-12-31 22:17 编辑
RaidenInfinity 发表于 2016-12-31 00:08
第一个问题,如果连什么都没有碰过的新工程都卡顿,99%是硬件(电脑)的锅。

如果有碰过分辨率,请确保是3 ...


滚回去检测了分辨率,没有改变,看来应该是电脑硬件的锅了Orz第二个问题我试着用黑色图块把地图空余的透明部分遮住了貌似凑合着可以行得通——顺便问问:如果在这个电脑上做的时候第一个问题存在,那游戏完成后导出到另外一台正常的电脑上运行会卡吗?


删掉了地图缩放——好像不卡了?!但是我有个朋友也用这个脚本,我玩过她的游戏,但她那儿好像没有卡顿问题?

建了个新工程,发现不卡......

点评

那看来十之八九就是那脚本的锅了。1秒截图60次,不爆炸都难。建议别搞这种玩意儿吧… 另外这里要介绍下一个QQ群 113622890 有各路大佬能提供支援  发表于 2016-12-31 22:22
这地图缩放脚本的运行原理是每帧都截图然后放大。这截图非常耗效率,如果电脑不给力就是卡出翔。不过这只是推测,还是要看新工程的情况。  发表于 2016-12-31 21:23
请尝试删掉地图缩放脚本然后再看看还卡不卡。我真怀疑是这鬼东西的锅。新工程确定会卡吗?  发表于 2016-12-31 21:06
把你工程給一電腦比較好的朋友測試  发表于 2016-12-31 20:28
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-28 06:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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