| 赞 | 794 |
| VIP | |
| 好人卡 | |
| 积分 | 352 |
| 经验 | |
| 最后登录 | 2026-7-22 |
| 在线时间 | 4171 小时 |
- 梦石
- 0
- 星屑
- 35248
- 在线时间
- 4171 小时
- 注册时间
- 2007-12-15
- 回帖
- 9489
|
发表于 2021-4-22 14:50:01
|
显示全部楼层
本帖最后由 89444640 于 2021-4-22 15:16 编辑
猫大威武。这个是XP的粒子系统吗?
以前这些都只能用图片旋转移动实现或者循环显示图片/动画,有的是卡,有的占并行处理。
阳光普照我是左上角循环移动图片并行处理,只有这一个并行,地图100*120,310个左右事件就开感到卡了。
比如这样显示镜头光晕,不用并行处理的图片并且明暗有变化可以吗?目前是用叠加动画实现的效果做好就不能改了,用脚本实现因该更效率。
屏幕所在范围,随机出现落雷可以吗?
然后扩展应用,显示落地雷的位置,能做带伤害判定吗?比如落地雷概率落在编号为1的草地上分布比较广不一定打到角色,走编号2的陆不会被雷劈,走编号3的树木下必定被雷追着劈。
循环动画一直跟着角色走,
用动画显示全屏的雨水飘花等,会跟着角色一起移动显得特别不自然。理想状态是雨水无缝下,不卷动,角色移动时候只有镜头跟随角色移动而雨水还是保持原来坐标接着下,看上去是角色雨里穿梭才对。
目前只能手动控制画面640*480或者显示循环动画事件做在事件上不跟随角色移动,理想状态是画面随意大小。
复杂轨迹樱飘雪……大概类似于这样,
我还想让它落水面出波纹……目前看来只能手动画几个飘落首尾相接的行走图,然后拼起来如果只画一两片不好看,跟下雨一样慢慢飘就好看多了。
然后还需要个类似于战场黑幕的效果,用处是干这个。
用于遮挡隐藏通道,我用这个最初目的是省地图……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,猫大看看,有没有什么可以加上去的新运动类型。 |
|