Project1

标题: XP默认系统的"又"一BUG [打印本页]

作者: 灯笼菜刀王    时间: 2018-12-5 20:37
标题: XP默认系统的"又"一BUG
本帖最后由 灯笼菜刀王 于 2018-12-5 21:02 编辑

原本想发XP区, 后来想想可能其他版本也会有这个BUG, 所以发这里一起讨论吧

这个BUG如下



这个是正常的动画播放效果, 但是实际用到场景里(这个不是scene battle,是我新建的场景)

动画的元件会丢失



瞧,  画面中播放的一样的动画,但是鱼雷不见了... 就单单只有鱼雷没有了,其他的光效都正常......

这里因为要做反潜动画, 所以移动了原本的端口的原点坐标(把oy增加了240, 为了体现水下场景嘛....)


把端口原点改回去, 鱼雷回来了


我猜测这个BUG的原因是因为端口原点移动了, 同时该动画里, 鱼雷使用了"旋转" 造成了这个元件坐标错误,显示到外太空去了, 其他的元件因为没旋转所以显示正常的原因吧



把鱼雷旋转后做成动画素材, 然后就正常显示了... 难道移动了端口原点就不能用旋转了么?

  实在很不爽每个要旋转的元件都做一份素材, 请问这个问题能解决么?








作者: yang1zhi    时间: 2018-12-5 21:31
本帖最后由 yang1zhi 于 2018-12-5 21:33 编辑

是把整个图旋转了吧,而不是分割后的这个选区
作者: guoxiaomi    时间: 2018-12-5 21:35
指定一个旋转中心试试
作者: y967    时间: 2018-12-5 22:33
大佬是要出自己的作品了
作者: 张咚咚    时间: 2018-12-5 23:36
本帖最后由 张咚咚 于 2018-12-5 23:50 编辑

p了一下,VA和XP记录动画的精灵数组坐标和端口坐标原点什么的貌似都相同,RPG::Sprite的animation_set_sprites处理坐标的方法里也没有发现和VA有什么不同的地方(可能是我漏找了也可能是找的地方不对)。。
估计是XP独有的bug。简单的解决方法估计要改动画文件了。
v = Viewport.new 0,0,640,480
s = Sprite.new v
s.bitmap = xxx
s.angle = 100

# 明明这样没问题的。。但是在动画里就错位了。。
v.ox = 100

旋转50度后默认的5号动画,viewport ox左右移动出现的问题。
弄张图让后面的前辈来解决吧。。



作者: 芯☆淡茹水    时间: 2018-12-6 07:27
鱼雷.y 似乎要补偿上 端口.y  ?!
作者: 89444640    时间: 2018-12-6 17:59
或者,你让潜艇回去正常位置,改下图,只露个头。
灵活点处理嘛,不必非要放下面表现深潜。
作者: b565185756    时间: 2018-12-8 16:39
太强了必须叫停
作者: chd114    时间: 2018-12-8 19:29
······我还以为是WindowsXP有什么bug
作者: RPGzh500223    时间: 2021-1-22 14:29
这不会是挖坟吧
rmxpx的RPG::Sprite写了x,y,照着x,y写个ox,oy
  1. module RPG
  2.   class Sprite < ::Sprite
  3.     def ox=(ox)
  4.       oxo = self.ox - ox
  5.       if oxo != 0
  6.         if @_animation_sprites != nil
  7.           for i in 0..15
  8.             @_animation_sprites[i].x += oxo
  9.           end
  10.         end
  11.         if @_loop_animation_sprites != nil
  12.           for i in 0..15
  13.             @_loop_animation_sprites[i].x += oxo
  14.           end
  15.         end
  16.       end
  17.       super
  18.     end
  19.    
  20.     def oy=(oy)
  21.       oyo = self.oy - oy
  22.       if oyo != 0
  23.         if @_animation_sprites != nil
  24.           for i in 0..15
  25.             @_animation_sprites[i].y += oyo
  26.           end
  27.         end
  28.         if @_loop_animation_sprites != nil
  29.           for i in 0..15
  30.             @_loop_animation_sprites[i].y += oyo
  31.           end
  32.         end
  33.       end
  34.       super
  35.     end
  36.   end
  37. end
复制代码

作者: 灯笼菜刀王    时间: 2021-1-22 15:23
RPGzh500223 发表于 2021-1-22 14:29
这不会是挖坟吧
rmxpx的RPG::Sprite写了x,y,照着x,y写个ox,oy

实际上改viewport的原点并不会改动它里面的sprite的原点~ 要这样解决的话, 是应该放在viewport里~

其实发这个帖子, 我无法理解的是"为什么不旋转animation_sprites, 它会跟着车走, 一旋转,它就下车了~~"

作者: RPGzh500223    时间: 2021-1-23 21:06
灯笼菜刀王 发表于 2021-1-22 15:23
实际上改viewport的原点并不会改动它里面的sprite的原点~ 要这样解决的话, 是应该放在viewport里~

其实 ...

可能我不是正经学习过的
你的描述我看不太懂
我是看楼上的动图理解的
我写了scene测试了的
a=RPG::Sprite.new(v=Viewport.new) (只为表达意思)
无论 a.ox、a.oy变化 还是v.ox、v.oy变化都行 (一次刷新改变100)
a播放动画的sprites  一直跟随a




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1