Project1

标题: 【 浮动效果 】 求 指 教 [打印本页]

作者: Ceopal    时间: 2013-8-9 21:37
标题: 【 浮动效果 】 求 指 教
本帖最后由 Ceopal 于 2013-8-10 22:08 编辑

    发现↑ ↓图片的话,像是撞到天花板与地板似的

    如果要写浮动效果,要带入加速度么

    怎么代入呢?没想好……求指教





@八月桑 就是当位置越上面、越下面时,其运动速度越慢,位置在中间时,浮动运动速度最快

@沙漠点灰  有虫,y值从50 move to 400,puts .y,返回350……
      效果:开始到结束,速度看上去分成了两个值
  
作者: 八月桑    时间: 2013-8-9 23:22
浮动是怎样的效果?能说清楚点么!
作者: SuperMario    时间: 2013-8-9 23:41
三角函数应该就行了
作者: 沙漠点灰    时间: 2013-8-10 02:46
本帖最后由 沙漠点灰 于 2013-8-10 16:08 编辑

lz说的是缓动的话,可以试试:
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Sprite
  4. #------------------------------------------------------------------------------
  5. #  RGSS
  6. #==============================================================================
  7.  
  8. class Sprite
  9.         #--------------------------------------------------------------------------
  10.         # ● 移动到
  11.         #--------------------------------------------------------------------------
  12.         def move_to(x, y, zoom, duration, opa=nil)
  13.                 @old_x = self.x
  14.                 @old_y = self.y
  15.                 @target_x = (x ? x : self.x)
  16.                 @target_y = (y ? y : self.y)
  17.                 @old_zoom = self.zoom_x
  18.                 @target_zoom = (zoom ? zoom : self.zoom_x)
  19.                 @target_opa = (opa ? opa : @target_opa)
  20.                 @old_opa = self.opacity
  21.                 @duration = duration
  22.                 @duration_full = duration.to_f
  23.         end
  24.         #--------------------------------------------------------------------------
  25.         # ● 刷新移动
  26.         #--------------------------------------------------------------------------
  27.         def move_update
  28.                 return true if @duration.nil? or @duration <= 0
  29.                 @duration -= 1
  30.                 var = 1-Math.f(@duration/@duration_full+1)
  31.                 self.x = (@old_x + (@target_x-@old_x) *var+0.5).to_i
  32.                 self.y = (@old_y + (@target_y-@old_y) *var+0.5).to_i
  33.                 self.zoom_x = @old_zoom + (@target_zoom-@old_zoom) *var
  34.                 self.zoom_y  = self.zoom_x
  35.                 self.opacity = (@old_opa + (@target_opa - @old_opa)*var+0.5).to_i if @target_opa
  36.                 false
  37.         end
  38. end
  39. def Math.f(x)
  40.         return self.f(x+2) if x < 0
  41.         return self.f(x-2) if x >= 2
  42.         (x-1)**2
  43. end

sprite_obj.move_to(目标X坐标[nil时不改变], 目标Y坐标[nil时不改变], 目标放大率[nil时不改变], 移动帧数[, 目标不透明度(nil时不改变)])

每帧需要调用sprite_obj.move_update
这个效果是刚开始(改变速度)比较快,越接近目标,(改变速度)越慢


将Math.f(x)改为三角(Sin)函数的话,能做成开始和结束比较慢,中间比较快。
PS:
Math.f(x)定义域为[0, 2),值域为[0, 1]
PS2:
自己开始时也用三角函数,但是后来就直接二次函数了,
毕竟效果又好计算又快


-----------------------------------------------------
@end55rpg
(x-1)**2换成1-(x-1)**2就行了




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