Project1
标题:
[FSL]窗口滑動效果
[打印本页]
作者:
雪流星
时间:
2011-1-22 12:09
标题:
[FSL]窗口滑動效果
本帖最后由 雪流星 于 2011-1-21 22:16 编辑
作另一个系统的时候,为了让窗口滑动,顺便制作出来的副产品......
使用说明:
创建窗口之后,可以使用调整窗口的座标,并且将窗口滑动到指定位置。
可用于制作华丽菜单显示效果
* 窗口.in(方向[, 移动距离])
方向可以为 2(下), 4(左), 6(右), 8(上)
移动距离默认为 10
将窗口滑动至画面外。
* 窗口.out(方向[, 移动距离])
方向可以为 2(下), 4(左), 6(右), 8(上)
移动距离默认为 10
将窗口由画面外滑动至原位。
* 窗口.move_to(目标 X 座标, 目标 Y 座标[, 移动距离])
移动距离默认为 10
将窗口滑动至指定座标。
#==============================================================================
# ■ [VX] 窗口滑动
# [VX] WindowSlide
#----------------------------------------------------------------------------
# 使用说明:
# 创建窗口之后,可以使用调整窗口的座标,并且将窗口滑动到指定位置。
# 可用于制作华丽菜单显示效果
# * 窗口.in(方向[, 移动距离])
# 方向可以为 2(下), 4(左), 6(右), 8(上)
# 移动距离默认为 10
# 将窗口滑动至画面外。
#
# * 窗口.out(方向[, 移动距离])
# 方向可以为 2(下), 4(左), 6(右), 8(上)
# 移动距离默认为 10
# 将窗口由画面外滑动至原位。
#
# * 窗口.move_to(目标 X 座标, 目标 Y 座标[, 移动距离])
# 移动距离默认为 10
# 将窗口滑动至指定座标。
#----------------------------------------------------------------------------
# 更新作者: 雪流星(Snstar2006)
# 许可协议: FSL
# 项目版本: 1.0.1
#----------------------------------------------------------------------------
# - *1.0.1* (2011-01-21) By 雪流星(Snstar2006)
# *修改算法,省去计算根号的步骤,稍微提高效率
# - *1.0.0* (2011-01-21) By 雪流星(Snstar2006)
# *初版
#==============================================================================
$fscript = {} if $fscript == nil
$fscript["WindowSlide"] = "1.0.0"
class Window_Base < Window
alias move_window_initialize initialize
def initialize(x, y, width, height)
move_window_initialize(x, y, width, height)
@permanent_x = x
@permanent_y = y
end
def in(direction, step=10)
case direction
when 2
move_to(self.x, -self.height, step)
when 4
move_to(-self.width, self.y, step)
when 6
move_to(Graphics.width + self.width, self.y, step)
when 8
move_to(self.x, Graphics.height + self.height, step)
end
Graphics.wait(1)
end
def out(direction, step=10)
case direction
when 2, 8
move_to(self.x, @permanent_y, step)
when 4, 6
move_to(@permanent_x, self.y, step)
end
end
def move_to(dest_x, dest_y, move_step=10)
dx = dest_x - self.x
dy = dest_y - self.y
if dx == 0
dy_step = move_step
dx_step = 0
elsif dy == 0
dx_step = move_step
dy_step = 0
else
max_distance_sq = dx**2+dy**2
angle = Math.atan(dy.abs/dx.abs)
dy_step = move_step*Math.sin(angle)
dx_step = max_distance_sq - dy_step**2
end
while (self.x != dest_x || self.y != dest_y)
if dx > 0
self.x = [self.x + dx_step, dest_x].min
else
self.x = [self.x - dx_step, dest_x].max
end
if dy > 0
self.y = [self.y + dy_step, dest_x].min
else
self.y = [self.y - dy_step, dest_x].max
end
Graphics.wait(1)
end
end
end
复制代码
作者:
一瞬间的幻觉
时间:
2011-1-22 16:15
又有好东西了!!谢谢楼主分享
作者:
DeathKing
时间:
2011-1-31 00:45
本帖最后由 DeathKing 于 2011-1-31 01:20 编辑
这个才是实用的东西啊,支持一个。
另外,有个项目的讨论,实现RMVX窗体特效:
http://rpg.blue/thread-155595-1-1.html
提交BUG:
move_to有一处拼写错误,应该是dest_y而不是dest_x。
提交更新:
#==============================================================================
# ■ [VX] 窗口滑动
# [VX] WindowSlide
#----------------------------------------------------------------------------
# 使用说明:
# 创建窗口之后,可以使用调整窗口的座标,并且将窗口滑动到指定位置。
# 可用于制作华丽菜单显示效果
# * 窗口.in(方向[, 移动距离])
# 方向可以为 2(下), 4(左), 6(右), 8(上)
# 移动距离默认为 10
# 将窗口滑动至画面外。
#
# * 窗口.out(方向[, 移动距离])
# 方向可以为 2(下), 4(左), 6(右), 8(上)
# 移动距离默认为 10
# 将窗口由画面外滑动至原位。
#
# * 窗口.move_to(目标 X 座标, 目标 Y 座标[, 移动距离])
# 移动距离默认为 10
# 将窗口滑动至指定座标。
#
#----------------------------------------------------------------------------
# 更新作者: 雪流星(Snstar2006) DeathKing
# 许可协议: FSL
# 项目版本: 1.1.0131
# 引用网址:
#----------------------------------------------------------------------------
# - 1.2.0131 By DeathKing
# * 修正了move_to方法中的一个拼写错误导致的死循环;
#
# - 1.1.0121 By 雪流星(Snstar2006)
# * 修改算法,省去计算根号的步骤,稍微提高效率;
#
# - 1.0.0121 By 雪流星(Snstar2006)
# * 初版;
#==============================================================================
$fscript = {} if $fscript == nil
$fscript["WindowSlide"] = "1.2.0131"
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
# 游戏中全部窗口的超级类。
#==============================================================================
class Window_Base < Window
alias move_window_initialize initialize
def initialize(x, y, width, height)
move_window_initialize(x, y, width, height)
@permanent_x = x
@permanent_y = y
end
#--------------------------------------------------------------------------
# ● 窗体划出
# direction : 方向
# step : 移动的步长
#--------------------------------------------------------------------------
def in(direction, step=10)
case direction
when 2
move_to(self.x, -self.height, step)
when 4
move_to(-self.width, self.y, step)
when 6
move_to(Graphics.width + self.width, self.y, step)
when 8
move_to(self.x, Graphics.height + self.height, step)
end
Graphics.wait(1)
end
#--------------------------------------------------------------------------
# ● 窗体划回
# direction : 方向
# step : 移动的步长
#--------------------------------------------------------------------------
def out(direction, step=10)
case direction
when 2, 8
move_to(self.x, @permanent_y, step)
when 4, 6
move_to(@permanent_x, self.y, step)
end
end
#--------------------------------------------------------------------------
# ● 移动窗体
# dest_x : 目的地x坐标
# dest_y : 目的地y坐标
# move_step : 移动的步长
#--------------------------------------------------------------------------
def move_to(dest_x, dest_y, move_step=10)
dx = dest_x - self.x
dy = dest_y - self.y
if dx == 0
dy_step = move_step
dx_step = 0
elsif dy == 0
dx_step = move_step
dy_step = 0
else
max_distance_sq = dx**2+dy**2
angle = Math.atan(dy.abs/dx.abs)
dy_step = move_step*Math.sin(angle)
dx_step = max_distance_sq - dy_step**2
end
while (self.x != dest_x || self.y != dest_y)
if dx > 0
self.x = [self.x + dx_step, dest_x].min
else
self.x = [self.x - dx_step, dest_x].max
end
if dy > 0
self.y = [self.y + dy_step, dest_y].min
else
self.y = [self.y - dy_step, dest_y].max
end
Graphics.wait(1)
end
end
end
复制代码
作者:
沉影不器
时间:
2011-2-12 21:36
提示:
作者被禁止或删除 内容自动屏蔽
作者:
sd592078335
时间:
2012-7-9 10:39
阿勒?这个脚本怎么用呐...看起来怪怪的说..
作者:
asdbnm166
时间:
2013-12-1 17:40
DeathKing 发表于 2011-1-31 00:45
这个才是实用的东西啊,支持一个。
另外,有个项目的讨论,实现RMVX窗体特效:http://rpg.blue/thread ...
这个脚本咋用。。是直接修改window_base还是在main前面。。。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1