Project1
标题:
精灵的移动
[打印本页]
作者:
945127391
时间:
2013-3-2 19:27
标题:
精灵的移动
其实这是为我的菜单写的。
不喜勿喷……
动画……大概截不了图吧……
其实这只是个很简单的脚本而已(怎么总感觉是供学习用的……)
好吧,我直接放上脚本:
#==============================================================================
# * 精灵的(匀加速)移动 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
复制代码
作者:
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