Project1

标题: 精灵的移动 [打印本页]

作者: 945127391    时间: 2013-3-2 19:27
标题: 精灵的移动
其实这是为我的菜单写的。
不喜勿喷……
动画……大概截不了图吧……
其实这只是个很简单的脚本而已(怎么总感觉是供学习用的……)
好吧,我直接放上脚本:
  1. #==============================================================================
  2. # * 精灵的(匀加速)移动 by 945127391
  3. #------------------------------------------------------------------------------
  4. #   说明:
  5. #   ① 指令:
  6. #      sprite.start_move              # 开始移动
  7. #      sprite.suspend_move            # 暂停移动
  8. #      sprite.stop_move               # 停止移动
  9. #      sprite.set_move_goal(x, y)     # 设置移动目标
  10. #             x - 目标X坐标
  11. #             y - 目标Y坐标
  12. #      sprite.set_move_velocity(iv_x, iv_y, ac_x, ac_y) # 设定移动速度
  13. #             iv_x - 横方向移动的初始速度
  14. #             iv_y - 纵方向移动的初始速度
  15. #             ac_x - 横方向移动的加速度
  16. #             ac_y - 纵方向移动的加速度
  17. #   ② 注意事项
  18. #      1.请先设置目标与速度再使用开始移动指令;
  19. #      2.加速度为0时为匀速运动;
  20. #      3.除了用停止移动指令会导致精灵停止移动以外,还有以下两种情况可能会导致精灵停止
  21. #        移动:
  22. #        - 速度小于或等于0
  23. #        - 到达目标
  24. #==============================================================================
  25. class Sprite
  26.   #----------------------------------------------------------------------------
  27.   # * 重命名方法
  28.   #----------------------------------------------------------------------------
  29.   alias old_ini initialize
  30.   alias old_upd update
  31.   #----------------------------------------------------------------------------
  32.   # * 初始化
  33.   #----------------------------------------------------------------------------
  34.   def initialize(viewport = nil)
  35.     old_ini(viewport)
  36.     # 移动初始化
  37.     @move_start = false
  38.     @move_goal = {:x => self.x, :y => self.y} # 目标点
  39.     @move_ivelocity = {:x => 0, :y => 0}      # 初始速度
  40.     @move_acceleration = {:x => 0, :y => 0}   # 加速度
  41.     @move_iframe_count = 0                    # 开始移动帧数
  42.   end
  43.   #----------------------------------------------------------------------------
  44.   # * 更新画面
  45.   #----------------------------------------------------------------------------
  46.   def update
  47.     old_upd
  48.     # 更新移动
  49.     if @move_start
  50.       # 横方向移动
  51.       if @move_goal[:x] != self.x
  52.         now_velocity = @move_ivelocity[:x] + (Graphics.frame_count - @move_iframe_count) * @move_acceleration[:x]
  53.         if now_velocity > 0
  54.           if (@move_goal[:x] - self.x).abs < now_velocity
  55.             self.x = @move_goal[:x]
  56.           else
  57.             if @move_goal[:x] > self.x
  58.               self.x += now_velocity
  59.             elsif @move_goal[:x] < self.x
  60.               self.x -= now_velocity
  61.             end
  62.           end
  63.         else @move_goal[:x] = self.x
  64.         end
  65.       end
  66.       # 纵方向移动
  67.       if @move_goal[:y] != self.y
  68.         now_velocity = @move_ivelocity[:y] + (Graphics.frame_count - @move_iframe_count) * @move_acceleration[:y]
  69.         if now_velocity > 0
  70.           if (@move_goal[:y] - self.y).abs < now_velocity
  71.             self.y = @move_goal[:y]
  72.           else
  73.             if @move_goal[:y] > self.y
  74.               self.y += now_velocity
  75.             elsif @move_goal[:y] < self.y
  76.               self.y -= now_velocity
  77.             end
  78.           end
  79.         else @move_goal[:y] = self.y
  80.         end
  81.       end
  82.     end
  83.   end
  84.   #----------------------------------------------------------------------------
  85.   # * 设定移动终点
  86.   #----------------------------------------------------------------------------
  87.   def set_move_goal(x, y)
  88.     @move_goal = {:x => x, :y => y}
  89.   end
  90.   #----------------------------------------------------------------------------
  91.   # * 设定移动速度
  92.   #----------------------------------------------------------------------------
  93.   def set_move_velocity(iv_x, iv_y, ac_x, ac_y)
  94.     @move_ivelocity = {:x => iv_x, :y => iv_y}
  95.     @move_acceleration = {:x => ac_x, :y => ac_y}
  96.   end
  97.   #----------------------------------------------------------------------------
  98.   # * 开始移动
  99.   #----------------------------------------------------------------------------
  100.   def start_move
  101.     @move_start = true
  102.     @move_iframe_count = Graphics.frame_count
  103.   end
  104.   #----------------------------------------------------------------------------
  105.   # * 暂停移动
  106.   #----------------------------------------------------------------------------
  107.   def suspend_move
  108.     @move_start = false
  109.   end
  110.   #----------------------------------------------------------------------------
  111.   # * 停止移动
  112.   #----------------------------------------------------------------------------
  113.   def stop_move
  114.     @move_start = false
  115.     @move_goal = {:x => self.x, :y => self.y}
  116.   end
  117. end
复制代码

作者: a1578032454    时间: 2013-3-8 18:11
能不能为脚本盲着想下....请加个 用处说明 和 使用说明 可以么?咱可是纯脚本盲.....
作者: 神秘来客3    时间: 2013-3-8 19:00
干什么用的?是让脚本里的精灵能移动的嘛?
作者: 冰鎮史萊姆    时间: 2013-3-16 23:57
你让我想到物理课了= =
不过还是挺实用的
作者: 生人勿近    时间: 2013-4-5 15:41
哪里来的精灵咧?
作者: Luciffer    时间: 2013-7-30 16:19
中高端脚本不给那些新手玩家解释一下他们不知道有什么用的啦wwwww




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