如何优雅的研究 RGSS3 (四) 使窗口从画面边缘弹出

在很多游戏中,窗口可以从游戏画面的边缘弹出。

而在 RGSS3 的默认脚本中时没有这种功能的,当在地图上按下取消键时,游戏菜单会突然出现。

现在我们可以为主菜单添加动画效果,使其在屏幕边缘弹出。

我们知道游戏中的画面并不是真正的在动,而是在每一帧都绘制一幅新的画面。

每一帧都对画面做一些微小的改变,在玩家的眼里就会产生画面在运动的错觉。

复杂的运动效果涉及到复杂的公式,这里我们只采用最简单的匀速直线运动。

我们为主菜单中的三个窗口添加匀速直线的运动规律,使其从画面的边缘移动到目标位置。

@command_window.x = -Graphics.width
@gold_window.y = Graphics.height
@status_window.x = Graphics.width

要做到这一点,首先要把窗口的初始化坐标设在画面之外。

我们把指令窗口的起始位置设在屏幕左侧,状态窗口设在屏幕右侧,金币窗口设在屏幕下侧。

由于系统在每一帧执行一次 update ,因此使窗口移动的代码既可以设置在窗口类的 update 方法中,也可以设置在场景类的 update 方法中。

考虑到我们只需要将主菜单场景的窗口移动起来,而且为了定位坐标更加便利,所以将移动部分的代码写在 Scene_Menu 中。

在 Scene_Menu 中重写一下 update 方法。

def update
  super
end

只要将运动公式添加到这个方法中就能实现移动效果了。

    if @command_window.x < -20
      @command_window.x += 20
    else
      @command_window.x = 0
    end
    if @status_window.x > 20
      @status_window.x -= 20
    else
      @status_window.x = 0
    end
    if @gold_window.y > Graphics.height - @gold_window.height + 2
      @gold_window.y -= 2
    else
      @gold_window.y = Graphics.height - @gold_window.height
    end

在我的设置中,让指令窗口与状态窗口每一帧移动20像素从屏幕左右侧移动到指定位置,让金币窗口每一帧移动2像素从屏幕下侧出现。

此时进入游戏打开菜单就可以观察到窗口的动画效果。

另外,因为我们的运动代码是在场景类的 update 方法中实现的,所以窗口在移动时并不影响功能的使用,这使我们的游戏更加流畅。

如何优雅的研究 RGSS3 (四) 使窗口从画面边缘弹出,布布扣,bubuko.com

时间: 2025-01-02 14:04:59

如何优雅的研究 RGSS3 (四) 使窗口从画面边缘弹出的相关文章

如何优雅的研究 RGSS3 (三) 调整窗口的细节

在上一期我们研究了向窗口中添加选项的方法,本期就来研究一下窗口类的具体细节. 所有窗口的父类 Window_Base 初始化时需要四个参数. #-------------------------------------------------------------------------- # ● 初始化对象 #-------------------------------------------------------------------------- def initialize(x,

如何优雅的研究 RGSS3 番外(二) 显示文字信息的窗口中的纤程

Ruby 中的 Fiber 通常称为纤程,是一种非抢占式的多线程模型. 纤程不能在外部被终止,只能等待其主动让出执行权. RGSS3 在事件解释器 Game_Interpreter 与显示文字信息的窗口 Window_Message 中都用到了纤程. 以 Window_Message 为例. #-------------------------------------------------------------------------- # ● 更新画面 #-----------------

如何优雅的研究 RGSS3 (五) 输入数字的画面

游戏中的名字输入画面是一个非常没有中国特色的场景. 我们知道英文不过26个字母,日语也只有几百个假名,但是汉字的数量实在是太多了,导致名字输入画面在汉化成中文版时只能用部分汉字来填充假名. 输入名字的功能并没有什么重要价值,但是这个功能实现的方法却值得我们研究. 游戏中有一个默认的输入数字的窗口,但是它非常不好用. 今天就来参照名字输入画面编写一个数字输入画面.用于玩家向游戏中输入数字. 涉及到名字输入画面的有三个类:Scene_Name.Window_NameEdit.Window_NameI

如何优雅的研究 RGSS3 (七) 添加LOGO画面

为游戏添加 LOGO 画面. 首先要设计 LOGO 场景类,我们知道场景类都是 Scene_Base 的子类. 我们来回顾一下场景的工作原理. 首先执行开始处理,接着是开始后处理,然后是不停的更新画面,最后结束前处理,然后结束处理. 下面来逐个分析这些方法. 当进入 LOGO 画面时,显然不需要也不可能回到上一个画面,因此在开始处理的方法中,我们要清空场景的切换记录. 接下来要创建出需要显示的 LOGO 图片,但是不能让它立即显示,而是要使其淡入画面,因此要冻结住图像的显示. 最后播放 LOGO

如何优雅的研究 RGSS3 (六) 技能与物品画面剖析

物品与技能画面剖析 物品画面和技能画面有共同的父类 Scene_ItemBase,而 Scene_ItemBase 继承自 Scene_MenuBase. Scene_ItemBase 在开始时用 create_actor_window 生成了显示角色的窗口备用. Scene_ItemBase 中定义了若干方法作为处理画面的工具. 其中 show_sub_window.hide_sub_window 可以显示.隐藏一个窗口. item.user用于获取选中的物品与使用者. on_actor_ok

如何优雅的研究 RGSS3 番外(一) ruby 实现的后缀自动机

*我真的不会 ruby 呀* #encoding:utf-8 #============================================================================== # ■ Suffix_Automaton #------------------------------------------------------------------------------ # 后缀自动机. #============================

四种常见的提示弹出框(success,warning,error,loading)原生JavaScript和jQuery分别实现

虽然说现在官方的自带插件已经有很多了,但是有时候往往不能满足我们的需求,下面我简单介绍一些 常见的四种提示弹出框(success,loading,error,warning),我分别用原生JavaScript和jQuery来介绍分享给各位博友! 一.首先介绍原生JavaScript来实现四种提示弹出框: 第一步:先看看html的建立 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:

怎样优雅的研究 RGSS3 番外(一) ruby 实现的后缀自己主动机

*我真的不会 ruby 呀* #encoding:utf-8 #============================================================================== # ■ Suffix_Automaton #------------------------------------------------------------------------------ # 后缀自己主动机. #==========================

&lt;转&gt;Android开发使输入框点击弹出日期选择对话框的方法

非常简单直接上代码: 转自:http://blog.sina.com.cn/s/blog_4ac1b5f60102vgnx.html final EditText et1=(EditText)findViewById(R.id.editText1); final Calendar c = Calendar.getInstance(); et1.setOnClickListener(new View.OnClickListener() { @Override public void onClick