查看: 2482|回复: 4

[已经解决] 【 浮动效果 】 求 指 教

[复制链接]
梦石
0
星屑
50
在线时间
521 小时
注册时间
2011-12-7
回帖
148
发表于 2013-8-9 21:37:31 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Ceopal 于 2013-8-10 22:08 编辑

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

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

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





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

@沙漠点灰  有虫,y值从50 move to 400,puts .y,返回350……
      效果:开始到结束,速度看上去分成了两个值
  

点评

没有啊= =效果就是减速到达目的地  发表于 2013-8-10 16:07
木有弄明白  发表于 2013-8-10 16:03

天才琪露诺

梦石
0
星屑
54
在线时间
276 小时
注册时间
2013-6-24
回帖
1620
发表于 2013-8-9 23:22:29 | 显示全部楼层
浮动是怎样的效果?能说清楚点么!

说人家是笨蛋的自己才是笨蛋,我最强了,最最最强!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
回帖
420
发表于 2013-8-9 23:41:46 来自手机 | 显示全部楼层
三角函数应该就行了

评分

参与人数 1星屑 +80 收起 理由
Sion + 80 感谢帮忙

查看全部评分

回复

使用道具 举报

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
回帖
638
发表于 2013-8-10 02:46:37 | 显示全部楼层
本帖最后由 沙漠点灰 于 2013-8-10 16:08 编辑

lz说的是缓动的话,可以试试:
[pre lang="ruby" line="1"]#encoding:utf-8
#==============================================================================
# ■ Sprite
#------------------------------------------------------------------------------
#  RGSS
#==============================================================================

class Sprite
        #--------------------------------------------------------------------------
        # ● 移动到
        #--------------------------------------------------------------------------
        def move_to(x, y, zoom, duration, opa=nil)
                @old_x = self.x
                @old_y = self.y
                @target_x = (x ? x : self.x)
                @target_y = (y ? y : self.y)
                @old_zoom = self.zoom_x
                @target_zoom = (zoom ? zoom : self.zoom_x)
                @target_opa = (opa ? opa : @target_opa)
                @old_opa = self.opacity
                @duration = duration
                @duration_full = duration.to_f
        end
        #--------------------------------------------------------------------------
        # ● 刷新移动
        #--------------------------------------------------------------------------
        def move_update
                return true if @duration.nil? or @duration <= 0
                @duration -= 1
                var = 1-Math.f(@duration/@duration_full+1)
                self.x = (@old_x + (@target_x-@old_x) *var+0.5).to_i
                self.y = (@old_y + (@target_y-@old_y) *var+0.5).to_i
                self.zoom_x = @old_zoom + (@target_zoom-@old_zoom) *var
                self.zoom_y  = self.zoom_x
                self.opacity = (@old_opa + (@target_opa - @old_opa)*var+0.5).to_i if @target_opa
                false
        end
end
def Math.f(x)
        return self.f(x+2) if x < 0
        return self.f(x-2) if x >= 2
        (x-1)**2
end[/pre]
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就行了

点评

有木有先慢后快的  发表于 2013-8-10 08:46

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 认可答案

查看全部评分

>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部