查看: 10382|回复: 40

[RMVA发布] 窗口飞入

[复制链接]
梦石
0
星屑
400
在线时间
602 小时
注册时间
2014-5-8
回帖
602
发表于 2016-2-2 13:01:43 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 布罗利 于 2016-2-3 11:04 编辑

{:2_248:}
这个系统我很久以前就写过了,一直没完善,今天终于完善了。
{:2_275:}
主要的功能是:进入场景的时候,窗口会有个飞入的动画,这样感觉会比较华丽有木有
{:2_286:}
也不知道VA有没有过类似的脚本,至少我没发现,不过XP有现成的,但用起来十分麻烦
{:2_278:}
话不多说,上脚本!
已更新至1.1版本
[box=PaleTurquoise]1.1更新内容
1-【支持自动执行move_start,用起来更简便】
2-【支持余数的运算,有余数窗口也会自动归位】[/box]

[box=Pink]注意!
1.0版本需要调用move_start这个方法,更新至1.1版本后
不需要再调用这个方法,请将1.0调用move_start的语句删除,不然会有BUG
[/box]

[box=Wheat]1.2版本预告
如果我有时间写1.2版本的话,除了修复BUG外,还会增添一些效果
目前只支持4种效果
1 窗口由上到下飞入
2 窗口由下到上飞入
3 窗口由左到右飞入
4 窗口由右到左飞入
1.2版本将会有更多的效果,例如窗口弹跳,窗口由小变大 等等.....
前提是我有时间的话.......
[/box]

[pre lang="ruby"]=begin
#==============================================================================
窗口飞入1.1    By 霸道  QQ1711044261  (C)神话时代制作组 2016_2_2
#==============================================================================

1.1更新内容

1-【支持自动执行move_start,用起来更简便】
2-【支持余数的运算,有余数窗口也会自动归位】

#==============================================================================
窗口进入
Window_move::speed(window,index)
窗口离开
Window_move::speed_back(window,index)

说明:系统会自动执行move_start和move_end两个方法,请不要改这两个方法名,否则会无效

index
1 窗口由上到下飞入
2 窗口由下到上飞入
3 窗口由左到右飞入
4 窗口由右到左飞入
注意:这是窗口进入的index 窗口离开的index和这个相反

动画速度
窗口的默认速度为8帧
如果需要改速度 改这个全局变量即可
值越小 速度越快 值越大 速度越慢
$window_speed =
#==============================================================================

已知不足
1.0版本的不足已经全部改善,暂未发现不足
如有发现不足 请联系 QQ1711044261或66RPG ID:布罗利

已知BUG
暂未发现BUG 如发现BUG想要解决 请联系 QQ1711044261或66RPG ID:布罗利

容易出现的问题
1、====================================
问:为什么窗口离开没有效果
答:目前发现两种可能
1、有可能窗口离开的语句和窗口进入的语句写反了
窗口离开的语句必须是Window_move::speed_back(window,index)
2、有可能改动了你改动了pre_terminate这个方法,具体要根据实际脚本来解决

如有问题出现 请联系 QQ1711044261或66RPG ID:布罗利

#==============================================================================
范例:
  #--------------------------------------------------------------------------
  # ● 窗口进入
  #--------------------------------------------------------------------------
  def move_start
    Window_move::speed(window,index)
  end
  #--------------------------------------------------------------------------
  # ● 窗口离开
  #--------------------------------------------------------------------------
  def move_end
    Window_move::speed_back(window,index)
  end
#==============================================================================

=end

$window_speed = 8
$windows = []

class Scene_Base
  def post_start
    move_start if respond_to? :move_start
    perform_transition
    Input.update
    Window_move::move #if respond_to? :move_start
  end
  def pre_terminate
    move_end if respond_to? :move_end
    Window_move::move_back
  end
end

module Window_move
  def self.speed(window,index=1)
    if window == nil
       return
     end
    window.opacity = 0
    window.contents_opacity = 0
    x = window.x ; y = window.y
    a = 0 ; b = 0
    case index
    when 1
      b = (window.height + y) / $window_speed
      c = (window.height + y) % $window_speed
    when 2
      b = (Graphics.height-y) / $window_speed
      c = (Graphics.height-y) % $window_speed
    when 3
      a = (window.width + x) / $window_speed
      c = (window.width + x) % $window_speed
    when 4
      a = (Graphics.width-x) / $window_speed
      c = (Graphics.width-x) % $window_speed
    end
    $windows << [window,index,a,b,c,x,y]
    case index
    when 1
      window.y = -window.height
    when 2
      window.y = Graphics.height
    when 3
      window.x = -window.width
    when 4
      window.x = Graphics.width
    end
  end
  def self.move
    $window_speed.times do |i|
      $windows.each do |window,n,a,b,c,x,y|
        case n
        when 1
          window.y += b
          window.opacity += 256 / $window_speed
          window.contents_opacity += 256 / $window_speed
        when 2
          window.y -= b
          window.opacity += 256 / $window_speed
          window.contents_opacity += 256 / $window_speed
        when 3
          window.x+= a
          window.opacity += 256 / $window_speed
          window.contents_opacity += 256 / $window_speed
        when 4
          window.x -= a
          window.opacity += 256 / $window_speed
          window.contents_opacity += 256 / $window_speed
        end
      end
      Graphics.update
    end
    $windows.each do |window,n,a,b,c,x,y|
      window.x = x
      window.y = y
    end
    $windows = []
  end
################################################################################  
   def self.speed_back(window,index=1)
     if window == nil
       return
     end
    x = window.x
    y = window.y
    a = 0
    b = 0
    case index
    when 1
      b = (window.height + y) / $window_speed
    when 2
      b = (Graphics.height-y) / $window_speed
    when 3
      a = (window.width + x) / $window_speed
    when 4
      a = (Graphics.width-x) / $window_speed
    end
    $windows << [window,index,a,b]
   end
   def self.move_back
    $window_speed.times do
      $windows.each do |window,n,a,b|
        case n
        when 1
          window.y -= b
          window.opacity -= 256 / $window_speed
          window.contents_opacity -= 256 / $window_speed
        when 2
          window.y += b
          window.opacity -= 256 / $window_speed
          window.contents_opacity -= 256 / $window_speed
        when 3
          window.x -= a
          window.opacity -= 256 / $window_speed
          window.contents_opacity -= 256 / $window_speed
        when 4
          window.x += a
          window.opacity -= 256 / $window_speed
          window.contents_opacity -= 256 / $window_speed
        end
      end
      Graphics.update
    end
    $windows = []
  end
end
[/pre]


脚本效果:
若水GIF截图_2016年2月2日12点46分52秒.gif

{:2_266:}
等级太低,图片最大3兆,清晰度没了.....

顺便附上范例工程: 窗口飞入范例.rar (1.55 MB, 下载次数: 254, 售价: 5 星屑)

@芯☆淡茹水 @牛肉面 @邪月长啸 @VIPArcher @RyanBern @上贺茂润 @怪蜀黍 @三途亚梦 @天使喝可乐 @myownroc @chd114 @YamazakiRyusa @黄谊洲 @slick @永燃的狂炎 @龙和许也 @月华风

点评

按照版规规定,出售附件的帖子不能得到系统奖励的喵~  发表于 2016-2-2 15:35

评分

参与人数 5星屑 +440 收起 理由
slick + 100 相当牛逼
紫英晓狼1130 + 200 精品文章
天使喝可乐 + 50 塞糖
龙和许也 + 30
邪月长啸 + 60 塞糖

查看全部评分

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2016-2-2 15:13:41 | 显示全部楼层
这个我记得就在这个区就有呢,不过标签是【已发主站】哦~

点评

゚ ∀゚)ノ 人家多少年前的帖子了这样攀比有什么意义吗?  发表于 2016-2-3 16:23
http://rm.66rpg.com/forum.php?mod=viewthread&tid=235752&extra=page%3D2%26filter%3Dtypeid%26typeid%3D647%26typeid%3D647 你是说这个吧,这都能入主站....我这个可比这个强多了.   发表于 2016-2-3 11:12
回复

使用道具 举报

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
回帖
6325
发表于 2016-2-2 16:00:36 | 显示全部楼层
之前就用过了
233.gif

点评

也对啊  发表于 2016-2-3 15:44
好像有点道理,但是仔细想想,追求影响力换种说法不就是自我满足名利吗  发表于 2016-2-3 15:25
多谢指点  发表于 2016-2-3 12:19
↓你的着眼点已经变成自我满足的名利过程,继续这样你是做不出有影响力的游戏的 自重  发表于 2016-2-3 12:13
别告诉我用的是这个 http://rm.66rpg.com/forum.php?mod=viewthread&tid=235752&extra=page%3D2%26filter%3Dtypeid%26typeid%3D647%26typeid%3D647  发表于 2016-2-3 11:29
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复

使用道具 举报

梦石
0
星屑
50
在线时间
49 小时
注册时间
2015-10-17
回帖
34
发表于 2016-2-3 00:35:34 | 显示全部楼层
谢谢楼主了,先收藏了!!!不过我的脚本用的比较多 怕会有冲突 先试一下

点评

更新到1.1了  发表于 2016-2-3 11:29
应该不会有冲突  发表于 2016-2-3 08:11
回复

使用道具 举报

梦石
0
星屑
400
在线时间
602 小时
注册时间
2014-5-8
回帖
602
 楼主| 发表于 2016-2-3 10:56:18 | 显示全部楼层
本帖最后由 布罗利 于 2016-2-3 11:00 编辑

已更新至1.1版本
1.1更新内容
1-【支持自动执行move_start,用起来更简便】
2-【支持余数的运算,有余数窗口也会自动归位】
这个系认可以进VA图书馆吗?
@怪蜀黍                                       
@VIPArcher

点评

已经入VA图书馆了,多谢taroxd大大  发表于 2016-2-3 11:28
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2016-2-3 11:51:11 | 显示全部楼层
本帖最后由 taroxd 于 2016-2-3 12:11 编辑
布罗利 发表于 2016-2-3 10:56
已更新至1.1版本
1.1更新内容
1-【支持自动执行move_start,用起来更简便】


[pre lang="ruby"]class Window_Base

  alias_method :real_x, :x
  alias_method :real_x=, :x=
  attr_reader :target_x
  alias_method :x, :target_x

  alias_method :init_without_transition, :initialize
  def initialize(x, y, width, height)
    @target_x = x
    init_without_transition(-width, y, width, height)
    update_transition_speed
  end

  alias_method :update_without_transition, :update
  def update
    if real_x != target_x
      new_x = real_x + @transition_speed
      new_x = target_x if new_x > target_x
      self.real_x = new_x
    end
    update_without_transition
  end

  def x=(x)
    @target_x = x
    update_transition_speed
  end

  def transition_duration
    8
  end

  def update_transition_speed
    @transition_speed = (target_x - real_x).fdiv transition_duration
  end
end
[/pre]

其实这样就足够好看了,太花哨反而乱的说。(该脚本不需要配置)



楼主写出这段东西是很好的。支持楼主继续学脚本写脚本~

对楼主的脚本留下一点小意见吧:
对于简单的需求,配置过于复杂,甚至需要脚本的知识。
对于复杂的需求,这个脚本不支持配置(别跟我说直接改 123 行那一块。这个昨天群里已经说过了)。

点评

简单是简单,可我这个算法不支持呢,除非重新写算法  发表于 2016-2-3 12:53
自定义公式就是类似于技能公式那样,动画的方式都是自己定义的。比如昨天群里大号的那个  发表于 2016-2-3 12:52
不同窗口不同速度简直不能再简单了,连我这个三十几行的脚本都支持……  发表于 2016-2-3 12:51
我才初二呢,不理解的东西太多了....  发表于 2016-2-3 12:35
什么叫自定义公式,参数方程呢?表示不太理解,不同窗口不同速度有点难,不过能支持不同场景不同速度.  发表于 2016-2-3 12:35

评分

参与人数 1梦石 +1 收起 理由
怪蜀黍 + 1 精品文章

查看全部评分

回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2016-2-6 14:07:51 | 显示全部楼层
效果图···你是加快了?还是本来就那样,感觉闪的太快了···

点评

好办法···  发表于 2016-2-7 09:58
$window_speed = 8 默认速度是8帧,调到16帧试试  发表于 2016-2-7 07:48
速度可以自己调啊,调到合适自己的不就行了吗  发表于 2016-2-7 07:48
速度太快太慢都不好···太快眼睛受不了,太慢人兽不了  发表于 2016-2-6 15:33
应该是本来的效果,速度可以调的  发表于 2016-2-6 15:14
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
1297
在线时间
995 小时
注册时间
2014-12-14
回帖
2939

开拓者

发表于 2016-2-22 21:16:37 | 显示全部楼层
谢谢分享!~很实用的代码!
【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
回复

使用道具 举报

梦石
0
星屑
15
在线时间
4 小时
注册时间
2018-1-28
回帖
8
发表于 2018-1-30 14:57:16 | 显示全部楼层
谢谢分享!~很实用的代码
回复

使用道具 举报

梦石
0
星屑
39
在线时间
13 小时
注册时间
2019-7-17
回帖
3
发表于 2019-7-21 21:01:55 | 显示全部楼层
围观一下--

点评

挖坟了  发表于 2019-7-22 09:19
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部