查看: 4436|回复: 9

[讨论] 这些天气足够人类使用了吧?

[复制链接]

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

发表于 2021-4-22 11:27:39 | 显示全部楼层 |阅读模式

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

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

×
111.png
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
梦石
0
星屑
29901
在线时间
5734 小时
注册时间
2016-3-8
回帖
1653
发表于 2021-4-22 11:55:02 | 显示全部楼层
本帖最后由 alexncf125 于 2021-4-22 11:59 编辑

没極光差评
弄些龙卷风过境破坏地图精灵好像也不错

点评

注释2可以满足……  发表于 2021-4-22 12:01
回复

使用道具 举报

梦石
0
星屑
1566
在线时间
120 小时
注册时间
2021-4-3
回帖
192
发表于 2021-4-22 12:40:14 | 显示全部楼层
有下载链接吗
回复

使用道具 举报

梦石
1
星屑
11993
在线时间
4534 小时
注册时间
2005-10-22
回帖
7091

开拓者贵宾

发表于 2021-4-22 14:27:58 | 显示全部楼层
应该下陨石(大雾)
回复

使用道具 举报

梦石
0
星屑
35248
在线时间
4171 小时
注册时间
2007-12-15
回帖
9489
发表于 2021-4-22 14:50:01 | 显示全部楼层
本帖最后由 89444640 于 2021-4-22 15:16 编辑

猫大威武。这个是XP的粒子系统吗?
以前这些都只能用图片旋转移动实现或者循环显示图片/动画,有的是卡,有的占并行处理。
阳光普照我是左上角循环移动图片并行处理,只有这一个并行,地图100*120,310个左右事件就开感到卡了。
03.png
比如这样显示镜头光晕,不用并行处理的图片并且明暗有变化可以吗?目前是用叠加动画实现的效果做好就不能改了,用脚本实现因该更效率。

屏幕所在范围,随机出现落雷可以吗?
然后扩展应用,显示落地雷的位置,能做带伤害判定吗?比如落地雷概率落在编号为1的草地上分布比较广不一定打到角色,走编号2的陆不会被雷劈,走编号3的树木下必定被雷追着劈。

循环动画一直跟着角色走,
04.png
用动画显示全屏的雨水飘花等,会跟着角色一起移动显得特别不自然。理想状态是雨水无缝下,不卷动,角色移动时候只有镜头跟随角色移动而雨水还是保持原来坐标接着下,看上去是角色雨里穿梭才对。
目前只能手动控制画面640*480或者显示循环动画事件做在事件上不跟随角色移动,理想状态是画面随意大小。

复杂轨迹樱飘雪……大概类似于这样,
树叶飘落.gif
我还想让它落水面出波纹……目前看来只能手动画几个飘落首尾相接的行走图,然后拼起来如果只画一两片不好看,跟下雨一样慢慢飘就好看多了。

然后还需要个类似于战场黑幕的效果,用处是干这个。
01.gif
用于遮挡隐藏通道,我用这个最初目的是省地图……999很容易个不够用,不敢浪费很多室内民宅都画一起没走到地方的时候不会因为上帝视角看到,也可以避免玩家太上帝视角,隔着墙看室内都有啥,限制视角范围变为“主角目视的可见范围”。
我这个也是土办法解决的,用事件显示黑色图片256*256最上手动遮挡,坏处是不规则地形或者大范围的遮挡处理起来非常麻烦,有没有比较方便的方法,显示一个不规则范围黑色范围,遮挡不该显示的……不过这个好像跟天气没啥关系……可能我又想多了

主要是想要更多的点击即用天气效果,但是那个运动规律的算法根本不知道是啥。我要是弄就只能图片处理了。
这是目前灯笼菜刀王给的代码。
菜刀的天气module RPG
  class Weather
    def initialize(viewport = nil)
      @type = 0
      @Max = 0
      @ox = 0
      @oy = 0
      @w = 0
      color1 = Color.new(255, 255, 255, 255)
      color2 = Color.new(255, 255, 255, 128)
      @rain_bitmap = Bitmap.new(7, 56)
      for i in 0..6
        @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1)
      end
      @storm_bitmap = Bitmap.new(130,2)
      #@snow_bitmap = Bitmap.new(6, 6)
      @sprites = []
      for i in 1..160
        sprite = RPG::Sprite.new(viewport)
        sprite.z = 1000
        sprite.visible = false
        sprite.opacity = 0
        @sprites.push(sprite)
      end
    end
    def dispose
      for sprite in @sprites
        sprite.dispose
      end
      @rain_bitmap.dispose
      @storm_bitmap.dispose
      #@snow_bitmap.dispose
    end
    def type=(type)
      return if @type == type
      @type = type
      case @type
      when 1
        bitmap = @rain_bitmap
      when 2
        bitmap = @storm_bitmap
      when 3
        #bitmap = RPG::Cache.fog("雪花",0)
      else
        bitmap = nil
      end
      for i in 1..160
        sprite = @sprites
        if sprite != nil
          sprite.visible = (i <= @max)
          if @type == 3
            f = [0,1,2,3,4,5,5,6,6,7,7,8,8,9,9,10,10,10,10,11,11,11,11,12,12,12,
            12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,
            18,18,18,19,19,19,19,19,20,20,20,20,20]        
            bitmap = RPG::Cache.fog("雪花"+抽签(f).to_s,0)
           # a = (1 + rand(5)) / 10.0
           # sprite.zoom_x = a
           # sprite.zoom_y = a
            sprite.z = 1000 + rand(61)
          end
          if @type == 2
            bitmap.fill_rect(0,0,30+rand(100),1+rand(2),
            Color.new(150,255,196,38+rand(99)))
          end
          sprite.bitmap = bitmap
        end
      end
    end
    def ox=(ox)
      return if @ox == ox;
      @ox = ox
      for sprite in @sprites
        sprite.ox = @ox
      end
    end
    def oy=(oy)
      return if @oy == oy;
      @oy = oy
      for sprite in @sprites
        sprite.oy = @oy
      end
    end
    def max=(max)
      return if @Max == max;
      @Max = [[max, 0].max, 160].min
      for i in 1..160
        sprite = @sprites
        if sprite != nil
          sprite.visible = (i <= @max)
        end
      end
    end
    def update
      return if @type == 0
       @w += 1
      @w = 0 if @w > 11
      for i in 1..@max
        sprite = @sprites
        if sprite == nil
          break
        end
        if @type == 1
          sprite.x -= 2
          sprite.y += 16
          sprite.opacity -= 8
        end
        if @type == 2
          sprite.x += K(22) ? -16 : 16
          sprite.opacity -= 2 + rand(11)
        end
        if @type == 3
#————————————————————————————————————————
# 以29号变量控制雪花飘落速度
#0 原版
#1 横版不能向上移动时,场景为一个画面不卷动时垂直
#2 1的情况下加上左右晃
#————————————————————————————————————————
        if V(29)== 0
        sprite.x -= 2
        sprite.y += 8
        sprite.opacity -= 8
        elsif V(29) == 1
        sprite.x -= 1 + rand(2) if @w % 3 == 0
        sprite.y += 1 #+ rand(8)
        sprite.opacity -= 4+rand(5)
        elsif V(29) == 2
        sprite.z += 1
        sprite.x += sprite.z<1030 ? 1+rand(2) : -(1+rand(2)) if @w%3==0
        sprite.z = 1000 if sprite.z > 1060
        sprite.y += 1 #+ rand(8)
        sprite.opacity -= 4+rand(5)
          end
        end
        x = sprite.x - @ox
        y = sprite.y - @oy
        if sprite.opacity < 64 or x < -50 or x > 750 or y < -300 or y > 500
          sprite.x = rand(800) - 50 + @ox
          sprite.y = rand(800) - 200 + @oy
          sprite.opacity = 255
        end
      end
    end
    attr_reader :type
    attr_reader :max
    attr_reader :ox
    attr_reader :oy
  end
end


新的运动类型,他让我自己写- -b,写这个根本是难为人嘛XD,猫大看看,有没有什么可以加上去的新运动类型。
回复

使用道具 举报

梦石
0
星屑
814
在线时间
122 小时
注册时间
2018-7-23
回帖
78
发表于 2021-4-25 03:54:32 | 显示全部楼层
那个吃西瓜的天气,酷热你居然都忘?多少份饺子都救不了你。

点评

表现热浪常见的是左右小幅度扭地图或者远景,XP不能调用显卡,不知道能不能做到这样。  发表于 2021-4-25 06:07
回复

使用道具 举报

梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2021-4-25 13:24:41 | 显示全部楼层
支持一下猫大
回复

使用道具 举报

梦石
0
星屑
248
在线时间
44 小时
注册时间
2020-10-31
回帖
12
发表于 2021-4-25 15:24:44 | 显示全部楼层
支持一下楼主
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部