本帖最后由 灯笼菜刀王 于 2019-3-16 11:19 编辑 ![]() 现在你知道脚本怎么运行了吧 双击游戏图标, WINDOWS窗口出现, 脚本开始工作, 先从上到下过一遍,没有写法错误一直顺利来到Main, $scene 赋予 Scene_Title 实例, 然后开始调用 Scene_Title的main, 生成各种酷炫吊拽靓的精灵和窗口(当然, 默认就一张图片一个窗口=.=), 然后循环刷新它们, 直到玩家操作选项, 然后$scene 重新赋予 scene map 或者 scene load 的实例(或者退出=.=), 释放掉scene title的酷炫吊拽靓的精灵和窗口, 生成其他main的酷炫吊拽靓的精灵和窗口,然后循环刷新它们...... |
本帖最后由 灯笼菜刀王 于 2019-3-16 10:24 编辑 miantouchi 发表于 2019-3-16 09:17 ![]() 看完脚本基础入门, 能参考F1看得懂一半的默认脚本内容, 就可以动手啦, 实际动手起来就会发现, 有些东西和你理解的完全就是两回事(笑), 纸上得来终觉浅 绝知此事要躬行。 脚本里有跳转的地方么? 当然有, 每一个if就是一次跳转, 当条件不满足的时候,系统就会直接跳过里面的执行命令, 跳到下一段去了, 被跳过的段是真正的没有被执行, 所以可以称为"跳转", 事件里的标签跳转,是体现在"循环"上 @a是实例变量,$a是全局变量,@a的范围应该是指在那个你写的脚本范围里面能用,$a在所有类里面都能用,是这个原因吗? 你理解的没错, @a是无法直接塞到 Scene_map里去UPDATE的, 因为这里的@a是事件解释器类, 也就是Interpreter 另外Scene_Map它负责的画图范围是哪里,是不是就是负责刷新弹出来的消息框。 Scene_Map负责刷新的东西可不少哦, 它刷新的东西在它的 def update 这段里, 找到后缀是.update 的就是啦, 这里可以初步接触Sprite类, 看看脚本里的Sprite类, 除了两个battle是战斗场景调用的外, 其他都是它调用的哦, Sprite类很麻烦, 这里不提, 以后你再去慢慢和它交流 ![]() 如果只是说窗口的话, 默认的scene map确实是只负责刷新"对话窗口"(Window_Message), 然而这个窗口就是老大级的啦, 它的复杂程度可不是其他窗口能比的, 笑 |
不瞒你说,我学习脚本就是为了复刻游戏的,里面有很多界面都需要改,例如战斗界面是纵版的(不同于系统默认的纵版),并且人物有攻击动画,双刀流、空手攻击动画,空手攻击有伤害,队伍跟随,菜单栏的修改等等,我这一看,单单靠事件和自身数据库的设置是打不到了,所以我就先从脚本入手了,就没着急直接做游戏,学习脚本,尝试着更改这些窗口。素材库人物行走图都基本弄完了。 第一个问题解决了。 第二个问题差不多明白了什么叫调用了,每次调用会覆盖前面的,顺序是从前往后,不会返回去。那你说,那能不能帮找一处脚本中,调用的地方和跳转的地方,脚本中有跳转的地方吗? 第三个问题$a 来代替之前的 @a,我测试了会刷新物品界面了,并且选择物品同时人物会行走。 @a是实例变量,$a是全局变量,@a的范围应该是指在那个你写的脚本范围里面能用,$a在所有类里面都能用,是这个原因吗? 另外Scene_Map它负责的画图范围是哪里,是不是就是负责刷新弹出来的消息框。 |
本帖最后由 灯笼菜刀王 于 2019-3-16 01:08 编辑 ![]() 1, 测试游戏中, 按F9可以打开 作弊窗口, 这里可以直接操作"变量和开关" 2, 你把所有a都换成 @a , 就可以看到只有最后一个窗口不会自己消失, 因为前面的那几个@a,调用完window_gold的实例后, 就被后面的覆盖掉了, 所以这些实例失去了指针, 就会被系统自然消除掉 你在下一个a = xxxx 之前加的命令, 当然就是操作当前的实例咯, 这个时候又没被重复赋值而覆盖, 证明指令是从上往下执行,并没有出现跳转哦 3, 不即时刷新, 那是因为这样调用金钱窗口, 没有上面说的中间那个"刷新步骤", 只有1和3, 所以你只能看到窗口生成和窗口释放消失 这次试试调用个大的, 先塞几个道具进去, 然后调用背包窗口, ![]() 你会发现, 虽然窗口显示了, 但是操作不了光标~ 一直按住上, 会发现, 背包打开的时候,角色还可以到处乱跑 ![]() 这个就是因为, 没有对这个窗口刷新,所以操作不了光标 然后,让我们做个小动作 ,到 scene_map 这个脚本里, 添加一句 ![]() 然后, 拿这个 $a 来代替之前的 @a ![]() ![]() |
本帖最后由 灯笼菜刀王 于 2019-3-15 15:36 编辑 ![]() 那其他的为什么会还在? 因为"曾经调用过", 但是没有"释放", 所以画面会留在屏幕上, 但是它们只是"投影", 没有任何功能, 失去指针的它们会被系统自己刷新掉, 如果你到处走走, 会看到窗口自己消失了 为什么最后一个窗口也会消失? 它不是a么? 因为 a是局部变量, 脚本一结束, 它就失效了, 所以第四个窗口等同于"无指针", 如果, 你把a换成@a(实变量), 那第四个窗口就不会消失了 ![]() 试试, 这样写, 每次和NPC对话, 都会在不同的位置出现一个金钱窗口(而且每次出现都会反应你的金钱变化,但是不会实时刷新) 这个就是"调用", 每次调用金钱窗口实例,但是并没有完全按它原本的方法来, 每次调用都改变了X的值, 而这个改变只是针对调用的对象, 没有对原本的窗口脚本有影响, 所以说,它不是"跳转" 2, 因为默认的1号开关是关闭的咯, 所以没有达成跳转条件, 自然就是三句显示了, 你前面增加一个打开1号开关, 就满足了跳转条件了(左边那个出现条件是多余的), 你可以按我原来的写法, 用F9打开1号开关后再和NPC对话试试 PS: 从这里可以看出, 你事件运用还不熟, 建议先熟悉事件运用, 熟悉下系统的基本逻辑, 再来研究脚本,比较有效率~ 事件和脚本是同样的,区别是事件是有加上"预防措施",避免"违规操作",而脚本是要靠"自觉"就是了 ![]() 3, 答案是 : 因为打开装备使用的是 Scene_Equip, 而战斗调用的是 Scene_Battle, $scene只能一次调用一个scene实例, 所以自然没办法在战斗中打开装备菜单, 非要这么做的话, 战斗会强制终止($scene != Scene_Battle 了) , 想战斗中打开装备菜单, 就要把Scene_Equip引用到的窗口实例,塞到Scene_Battle里, 并在合适的时候刷新它们, 不刷新的话, 就像前面的金钱窗口, 只是显示出来, 不会随着金钱变化而变化咯 |
本帖最后由 灯笼菜刀王 于 2019-3-15 10:36 编辑 你说的没错, 跳转就是运行到某一步骤, 出现跳转就意味着, 运行位置出现变动, 你可以用事件: 标签 和 标签跳转 来实际体验下 ![]() 这个就是运行的指令出现跳转的情况, 你可以发现,当开关1号打开的时候, 永远不会运行 显示文章:第三句, 系统会一直跳转到第一行开始, 依次显示 第一句, 第二句,然后循环 而调用, 是指令并不会出现变动, 它调用该目标的方法结束后 ,会继续执行接下来的指令, 注意, 被调用的目标可以同时被复数对象调用 ![]() 你之前学的是"重复赋值的话, 下面的会被上面的覆盖" 对吧 试试在游戏里建个NPC, 执行上面的那些脚本, 看看和你理解的有啥不同(可以写在同一个脚本指令框里,我是懒得重新打直接复制的XD,估计又会被某人说不够优雅了 ![]() |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2025-7-19 18:46
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.