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

Project1

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

[已经解决] 天气系统的图片用并行事件显示很卡,用脚...已解决

[复制链接]

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

跳转到指定楼层
1
发表于 2017-10-14 23:28:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 飞翔的小鸟3 于 2017-10-15 12:12 编辑

原标题:天气系统的图片用并行事件显示很卡,用脚本循环卡死
写了一个天气系统,可是用并行事件显示来移动图片很卡,并不掉帧,就是卡,走路很慢。用脚本的while语句直接卡死,不能动。
你们写天气系统都是怎么处理的呢?
顺便说一下啊,这个原因是我1帧调用一下   1.times { Fiber.yield }  ,所以才卡,但是如果不这样子,雪花怎么连续移动呢?
ps,我又想了想,60帧刷新一下就不会这么卡了...所以,并不是我调用了1.times { Fiber.yield },而是调用的1.times { Fiber.yield }帧数不够多?
但是,这只是间接原因,根本原因是一时间处理的图片太多?那别人怎么写着没事?怎么想还是我写法的问题。

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2017-10-15 00:27:48 | 只看该作者
本帖最后由 guoxiaomi 于 2017-10-15 14:36 编辑

把你的整个脚本,事件发出来。


你看,发出来一下子就知道问题了
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

3
 楼主| 发表于 2017-10-15 01:39:50 | 只看该作者
guoxiaomi 发表于 2017-10-15 00:27
把你的整个脚本,事件发出来。

RUBY 代码复制
  1. class Weather_change
  2. #==============生成初始值=================
  3.   def start
  4.     if $Weather_change_num == nil
  5.       $stop_weather = 0
  6.       $Weather_change_num = 0
  7.     end
  8.     case rand(2)
  9.     when 0
  10.       @trajectory_x = rand(744)
  11.     when 1
  12.       @trajectory_x = -rand(200)
  13.     end
  14.     @trajectory_y = -rand(416)
  15.   end
  16. #===============生成图像================
  17.   def Generating_image(type)
  18.     case type
  19.     # 雪
  20.     when 1
  21.       $weather_arr = []
  22.       $weather_x = []
  23.       $weather_y = []
  24.       for a in 0..100
  25.       start
  26.       $weather_arr[a] =  Sprite.new
  27.       $weather_arr[a].bitmap = Bitmap.new("Graphics/weather/雪花.png")
  28.       $weather_arr[a].x = @trajectory_x
  29.       $weather_arr[a].y = @trajectory_y
  30.       $weather_x[a] = @trajectory_x
  31.       $weather_y[a] = @trajectory_y
  32.       end
  33.     # 雨1
  34.     when 2
  35.     # 雨2
  36.     when 3
  37.     # 雾
  38.     when 4
  39.     # 风
  40.     when 5
  41.     # 暴风
  42.     when 6
  43.     # 冰雹
  44.     when 7
  45.     end
  46.   end
  47. #==============要生成的天气类型==============
  48.   def Weather_type(type)
  49.     case type
  50.     #=================================
  51.     # 普通天气
  52.     #=================================
  53.     # 小雪
  54.     when 0
  55.       start
  56.       Generating_image(1)
  57.       $game_switches[38] = true
  58.     # 中雪
  59.     when 1
  60.     # 大雪
  61.     when 2
  62.     # 小雨
  63.     when 3
  64.     # 中雨(天灰)
  65.     when 4
  66.     # 大雨(天黑)
  67.     when 5
  68.     # 大雨(打雷+天黑)
  69.     when 6
  70.     # 空打雷
  71.     when 7
  72.     # 雾
  73.     when 8
  74.     # 小风
  75.     when 9
  76.     # 大风
  77.     when 10
  78.     #=================================
  79.     # 灾难性天气
  80.     #=================================
  81.     # 暴风
  82.     when 11
  83.     # 冰雹
  84.     when 12
  85.     # 霜冻
  86.     when 13
  87.     # 台风
  88.     when 14
  89.     # 雷电
  90.     when 15
  91.     # 地震
  92.     when 16
  93.     # 沙尘暴
  94.     when 17
  95.     # 停止天气
  96.     when 100
  97.     end
  98.   end
  99. #==================运动轨迹===================
  100.   # 往右下运动
  101.   def path_particle_1(type)
  102.     case type
  103.     when 1
  104.       x = 2
  105.       y = 4
  106.     when 2
  107.     end
  108.     for a in 0..100
  109.     $weather_x[a] += x
  110.     $weather_y[a] += y
  111.     end
  112.   end
  113.   # 往左下运动
  114.   def path_particle_2
  115.   end
  116.   # 水平向左
  117.   def path_particle_3
  118.   end
  119.   # 水平向右
  120.   def path_particle_4
  121.   end
  122.   # 竖直向下
  123.   def path_particle_5
  124.   end
  125.   # 往右下摆动
  126.   def path_particle_6
  127.   end
  128.   # 往左下摆动
  129.   def path_particle_7
  130.   end
  131. #==================要循环的天气=================
  132.   def light_snow
  133.     while $stop_weather < 1
  134.     path_particle_1(1)
  135.     for a in 0..100
  136.     $weather_arr[a].x = $weather_x[a]
  137.     $weather_arr[a].y = $weather_y[a]
  138.     end
  139.     1.times { Fiber.yield }
  140.     Graphics.update
  141.     end
  142.   end
  143. end







点评

啊,见鬼了,各位,我把Graphics.update删掉,没事了  发表于 2017-10-15 12:06
一秒创建60个实例……GC59个a……  发表于 2017-10-15 10:06
不知道为什么,总感觉有。。。有毒啊。。Scene_Base已经无时不刻在Graphics.update,完全没必要写这个,  发表于 2017-10-15 09:02
这个实例变量怪怪的,有时有值,有时为nil,明明在同一个方法内  发表于 2017-10-15 01:43
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
390
在线时间
174 小时
注册时间
2014-11-3
帖子
8
4
发表于 2017-10-15 09:36:22 | 只看该作者
是不是和其他脚本冲突了?
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

5
发表于 2017-10-15 09:40:20 | 只看该作者
我说啊。
在公共事件里执行脚本需要等待帧啊同学。
否则有些动作根本来不及执行啊亲。在天气循环下增加一个“等待1帧”试试效果?

点评

嗯,谢谢  发表于 2017-10-15 20:42
Graphics.update事件里面慎用  发表于 2017-10-15 20:34
试过了啊,没用  发表于 2017-10-15 12:03
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

6
 楼主| 发表于 2017-10-15 12:02:42 | 只看该作者
本帖最后由 飞翔的小鸟3 于 2017-10-15 12:10 编辑

各位,不然怎么写啊
更新:
还真让张冬冬同学说对了,我把Graphics.update删掉,没事了,我本来的想法是,不调用Graphics.update,他怎么会自己刷新图片呢?这是看F1帮助文档的锅
有图为证:


他那里调用了Graphics.update,我以为要调用这个,图片的位置才会刷新。。。。。。
不管怎么说,问题解决了
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

7
发表于 2017-11-5 11:11:01 | 只看该作者
除非是纯脚本绘制的窗口场景
否则事件里面慎用Graphics.update
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-18 01:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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