查看: 3787|回复: 13

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

[复制链接]
梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
回帖
177

开拓者

发表于 2017-10-14 23:28:10 | 显示全部楼层 |阅读模式

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

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

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

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

开拓者

发表于 2017-10-15 00:27:48 | 显示全部楼层
本帖最后由 guoxiaomi 于 2017-10-15 14:36 编辑

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


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

使用道具 举报

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

开拓者

 楼主| 发表于 2017-10-15 01:39:50 | 显示全部楼层
guoxiaomi 发表于 2017-10-15 00:27
把你的整个脚本,事件发出来。

[pre lang="ruby"]class Weather_change
#==============生成初始值=================
  def start
    if $Weather_change_num == nil
      $stop_weather = 0
      $Weather_change_num = 0
    end
    case rand(2)
    when 0
      @trajectory_x = rand(744)
    when 1
      @trajectory_x = -rand(200)
    end
    @trajectory_y = -rand(416)
  end
#===============生成图像================
  def Generating_image(type)
    case type
    # 雪
    when 1
      $weather_arr = []
      $weather_x = []
      $weather_y = []
      for a in 0..100
      start
      $weather_arr[a] =  Sprite.new
      $weather_arr[a].bitmap = Bitmap.new("Graphics/weather/雪花.png")
      $weather_arr[a].x = @trajectory_x
      $weather_arr[a].y = @trajectory_y
      $weather_x[a] = @trajectory_x
      $weather_y[a] = @trajectory_y
      end
    # 雨1
    when 2
    # 雨2
    when 3
    # 雾
    when 4
    # 风
    when 5
    # 暴风
    when 6
    # 冰雹
    when 7
    end
  end
#==============要生成的天气类型==============
  def Weather_type(type)
    case type
    #=================================
    # 普通天气
    #=================================
    # 小雪
    when 0
      start
      Generating_image(1)
      $game_switches[38] = true
    # 中雪
    when 1
    # 大雪
    when 2
    # 小雨
    when 3
    # 中雨(天灰)
    when 4
    # 大雨(天黑)
    when 5
    # 大雨(打雷+天黑)
    when 6
    # 空打雷
    when 7
    # 雾
    when 8
    # 小风
    when 9
    # 大风
    when 10
    #=================================
    # 灾难性天气
    #=================================
    # 暴风
    when 11
    # 冰雹
    when 12
    # 霜冻
    when 13
    # 台风
    when 14
    # 雷电
    when 15
    # 地震
    when 16
    # 沙尘暴
    when 17
    # 停止天气
    when 100
    end
  end
#==================运动轨迹===================
  # 往右下运动
  def path_particle_1(type)
    case type
    when 1
      x = 2
      y = 4
    when 2
    end
    for a in 0..100
    $weather_x[a] += x
    $weather_y[a] += y
    end
  end
  # 往左下运动
  def path_particle_2
  end
  # 水平向左
  def path_particle_3
  end
  # 水平向右
  def path_particle_4
  end
  # 竖直向下
  def path_particle_5
  end
  # 往右下摆动
  def path_particle_6
  end
  # 往左下摆动
  def path_particle_7
  end
#==================要循环的天气=================
  def light_snow
    while $stop_weather < 1
    path_particle_1(1)
    for a in 0..100
    $weather_arr[a].x = $weather_x[a]
    $weather_arr[a].y = $weather_y[a]
    end
    1.times { Fiber.yield }
    Graphics.update
    end
  end
end
[/pre]




QQ截图20171015013916.jpg

点评

啊,见鬼了,各位,我把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
回复

使用道具 举报

梦石
0
星屑
422
在线时间
177 小时
注册时间
2014-11-3
回帖
8
发表于 2017-10-15 09:36:22 | 显示全部楼层
是不是和其他脚本冲突了?
回复

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

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

点评

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

使用道具 举报

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

开拓者

 楼主| 发表于 2017-10-15 12:02:42 | 显示全部楼层
本帖最后由 飞翔的小鸟3 于 2017-10-15 12:10 编辑

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

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

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2017-11-5 11:11:01 | 显示全部楼层
除非是纯脚本绘制的窗口场景
否则事件里面慎用Graphics.update
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部