赞 | 1 |
VIP | 0 |
好人卡 | 11 |
积分 | 0 |
经验 | 26243 |
最后登录 | 2014-8-4 |
在线时间 | 841 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 48
- 在线时间
- 841 小时
- 注册时间
- 2010-8-11
- 帖子
- 1135
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
其实这是为我的菜单写的。
不喜勿喷……
动画……大概截不了图吧……
其实这只是个很简单的脚本而已(怎么总感觉是供学习用的……)
好吧,我直接放上脚本:- #==============================================================================
- # * 精灵的(匀加速)移动 by 945127391
- #------------------------------------------------------------------------------
- # 说明:
- # ① 指令:
- # sprite.start_move # 开始移动
- # sprite.suspend_move # 暂停移动
- # sprite.stop_move # 停止移动
- # sprite.set_move_goal(x, y) # 设置移动目标
- # x - 目标X坐标
- # y - 目标Y坐标
- # sprite.set_move_velocity(iv_x, iv_y, ac_x, ac_y) # 设定移动速度
- # iv_x - 横方向移动的初始速度
- # iv_y - 纵方向移动的初始速度
- # ac_x - 横方向移动的加速度
- # ac_y - 纵方向移动的加速度
- # ② 注意事项
- # 1.请先设置目标与速度再使用开始移动指令;
- # 2.加速度为0时为匀速运动;
- # 3.除了用停止移动指令会导致精灵停止移动以外,还有以下两种情况可能会导致精灵停止
- # 移动:
- # - 速度小于或等于0
- # - 到达目标
- #==============================================================================
- class Sprite
- #----------------------------------------------------------------------------
- # * 重命名方法
- #----------------------------------------------------------------------------
- alias old_ini initialize
- alias old_upd update
- #----------------------------------------------------------------------------
- # * 初始化
- #----------------------------------------------------------------------------
- def initialize(viewport = nil)
- old_ini(viewport)
- # 移动初始化
- @move_start = false
- @move_goal = {:x => self.x, :y => self.y} # 目标点
- @move_ivelocity = {:x => 0, :y => 0} # 初始速度
- @move_acceleration = {:x => 0, :y => 0} # 加速度
- @move_iframe_count = 0 # 开始移动帧数
- end
- #----------------------------------------------------------------------------
- # * 更新画面
- #----------------------------------------------------------------------------
- def update
- old_upd
- # 更新移动
- if @move_start
- # 横方向移动
- if @move_goal[:x] != self.x
- now_velocity = @move_ivelocity[:x] + (Graphics.frame_count - @move_iframe_count) * @move_acceleration[:x]
- if now_velocity > 0
- if (@move_goal[:x] - self.x).abs < now_velocity
- self.x = @move_goal[:x]
- else
- if @move_goal[:x] > self.x
- self.x += now_velocity
- elsif @move_goal[:x] < self.x
- self.x -= now_velocity
- end
- end
- else @move_goal[:x] = self.x
- end
- end
- # 纵方向移动
- if @move_goal[:y] != self.y
- now_velocity = @move_ivelocity[:y] + (Graphics.frame_count - @move_iframe_count) * @move_acceleration[:y]
- if now_velocity > 0
- if (@move_goal[:y] - self.y).abs < now_velocity
- self.y = @move_goal[:y]
- else
- if @move_goal[:y] > self.y
- self.y += now_velocity
- elsif @move_goal[:y] < self.y
- self.y -= now_velocity
- end
- end
- else @move_goal[:y] = self.y
- end
- end
- end
- end
- #----------------------------------------------------------------------------
- # * 设定移动终点
- #----------------------------------------------------------------------------
- def set_move_goal(x, y)
- @move_goal = {:x => x, :y => y}
- end
- #----------------------------------------------------------------------------
- # * 设定移动速度
- #----------------------------------------------------------------------------
- def set_move_velocity(iv_x, iv_y, ac_x, ac_y)
- @move_ivelocity = {:x => iv_x, :y => iv_y}
- @move_acceleration = {:x => ac_x, :y => ac_y}
- end
- #----------------------------------------------------------------------------
- # * 开始移动
- #----------------------------------------------------------------------------
- def start_move
- @move_start = true
- @move_iframe_count = Graphics.frame_count
- end
- #----------------------------------------------------------------------------
- # * 暂停移动
- #----------------------------------------------------------------------------
- def suspend_move
- @move_start = false
- end
- #----------------------------------------------------------------------------
- # * 停止移动
- #----------------------------------------------------------------------------
- def stop_move
- @move_start = false
- @move_goal = {:x => self.x, :y => self.y}
- end
- end
复制代码 |
|