扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 136|回复: 0

[转载发布] [分享]一种基于面条代码的窗口修改方案

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    2025-2-4 02:05
  • 签到天数: 110 天

    连续签到: 2 天

    [LV.6]常住居民II

    2327

    主题

    395

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10465
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13215

    灌水之王

    发表于 2024-3-7 01:11:38 | 显示全部楼层 |阅读模式
    适用人群:懂JS 但不知道怎么下手MV插件的开发者
    缓解症状:对纯触摸窗口进行修改
    不适反应:面条代码,需要自己2次封装(对的对的 我就是要用垃圾代码来刺激你)

    以下代码仅供参考,我提供一个思路。
    请以自己的思维阅读理解并拓展。
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    首先给Sprite的原型链上增加以下方法
    来获得其相对于窗口的X和Y
    JAVASCRIPT 代码
    1. Sprite.prototype.getTotalValue = function(propertyName){
    2.     let total = this[propertyName];
    3.     for(let current = this; current && current.parent && current.parent[propertyName]; current = current.parent){
    4.         total += current.parent[propertyName];
    5.     }
    6.     return total;
    7. }
    8. Sprite.prototype.getX = function(){returnthis.getTotalValue('x');}
    9. Sprite.prototype.getY = function(){returnthis.getTotalValue('y');}
    复制代码

    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    场景(Scene)->窗口(Window)->精灵(Sprite)->位图(Bitmap)
    是我理解的构成视图(游戏画面)的基本元素
    可以理解成 分子 原子 电子

    游戏画面运行的当前的场景
    比如
    JAVASCRIPT 代码
    1. window.onload = function(){
    2.     SceneManager.run(Scene_Boot);
    3. };
    复制代码

    这是MV的启动主入口 让场景SceneManager启动Scene_Boot场景
    SceneManager.push(进入下一个场景)SceneManager.pop(返回上一个场景)
    充斥这整个游戏运行过程。

    那么 我们如何修改一个场景
    拿设置窗口举例
    在img里定义好 这个场景会用到的图片,进行预加载。
    当图片加载后 load会自增 ,那么 只有确定图片都加载完成后,才执行原本 create中要执行的代码。
    JAVASCRIPT 代码
    1. Scene_Options.prototype.initialize = function(){
    2.     Scene_MenuBase.prototype.initialize.call(this);
    3.     this.img=[
    4.         ["img/pictures/","SYSTEN_DB"],
    5.         ["img/pictures/","SYSTEN_LANGUAGE_left"],
    6.         ["img/pictures/","SYSTEN_LANGUAGE_right"],
    7.         ["img/pictures/","button_back_white"],
    8.     ]
    9.     this.load=0
    10.     this._bit=[]
    11.     for(let i=0;i{this.create()},100)
    12. };
    复制代码

    //////////////////////////////////////////////////////////////////////////////////////////////////////
    createOptionsWindow 会执行以下方法
    创建一个属于window的类  addWindow可以理解成把这个类加入到场景中
    为了方便快速出效果 我把this._bit和this 直接传入,运行上没什么问题。
    当然我推荐你自己构造更优雅的方式
    JAVASCRIPT 代码
    1. this._optionsWindow = new Window_Options(this._bit,this);
    2. this.addWindow(this._optionsWindow);
    复制代码

    //////////////////////////////////////////////////////////////////////////////////////////////////////
    this.opacity=0可以理解成 直接去掉原本的MV样式
    这里我把传入的bit[0] 作为background(Sprite)Bitmap
    this.listData是其他要生成的Sprite 定义了使用哪个bit和与生成的位置,name是触发时的标记
    JAVASCRIPT 代码
    [code]Window_Options.prototype.initialize = function(bit,orgin){
        this._bit=bit
        this._orgin=orgin
        Window_Base.prototype.initialize.call(this, 0, 0);
        this.opacity=0
        this._background = new Sprite(bit[0]);
        this.addChildAt(this._background, 1);
        this.x=(Graphics.boxWidth-this.windowWidth())/2
        this.y=(Graphics.boxHeight-this.windowHeight())/2

        this.listData=[
            {bit:3,x:20,y:465,name:"back"},
            {bit:1,x:180,y:130,name:"bgmR"},
            {bit:1,x:180,y:215,name:"seR"},
            {bit:1,x:180,y:300,name:"bgsR"},
            {bit:1,x:180,y:385,name:"meR"},

            {bit:2,x:340,y:130,name:"bgmL"},
            {bit:2,x:340,y:215,name:"seL"},
            {bit:2,x:340,y:300,name:"bgsL"},
            {bit:2,x:340,y:385,name:"meL"}
        ]
        this.list=[]
        for(let i=0;i= x &&
                    TouchInput.x = y &&
                    TouchInput.y
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-10 16:51 , Processed in 0.132235 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表