Project1
标题:
自己的一些点子。事件、插件结合完成一些效果分享。
[打印本页]
作者:
salvareless
时间:
2016-12-11 02:37
标题:
自己的一些点子。事件、插件结合完成一些效果分享。
大家好,这里是一个在论坛混了几年,但是没太多时间也学不会js的老新人。
因为有些时候我会突然蹦出一些奇怪的点子,然后找半天也没有插件能够实现,或者我找不到相应的插件。所以很多时候需要自己找一些奇葩的办法去实现,我会在这张帖子里贴出我自己的一些想法和方案。
一方面分享出来,以防会有其他人需要。第二方面大家可以交流一下更好的实现方式。
内容我会全部编辑到一楼,有需要的人可以直接取用。但是应为会用到一些别人的脚本,拿走方案的人,如果需要发表,也还是需要获得插件原作者的许可。
话不多说,下面开始。
【一】【放置游戏常见的工匠分配界面】
界面效果大致如图:
由于直接用脚本写会很难,涉及到实时刷新。所以我换了一个思路来做。
需要用到的插件:MOG_EventText.js和PictureCallCommon.js。
先说说这两个插件,MOG_EventText.js和本站的namepop的效果是一样的,选用MOG_EventText.js是因为它的标记是用“注释”的方式写在事件的执行内容里的,而不是像namepop一样写在事件自己的注释中,这一点很重要,后面说。然后PictureCallCommon.js的作用是用来加载一张图片,并将这个图片和一个公共事件联结在一起。用来做到点击图片触发公共事件的效果。
具体流程如下:
1·首先需要修改一下MOG_EventText.js。在Sprite_CharText.prototype.refresh_char_text方法中的最后一行(this._char_text.bitmap.drawText(text,0,0,90,32,"center");)的前面加一个判断,内容大概可以这样写(if (text === "sosxi"){text = $gameVariables.value(63);};)这一句的意思是如果确定要显示文字的事件,它本来要显示的文字是sosxi的话,就把它替换成游戏内部第63号变量的值。当然因为放置游戏通常有很多资源,多以这样的判断可能需要写好几个,请保证每一个判断当中被替换掉的字符都是不同的。
2·你只能把这个界面做成一张地图,而不能指望它只是一个窗口。具体很简单,做一张你想要的这个界面的效果图,留出所以可变的数据的位置,和按钮图片的位置,然后把这张图设置成这张地图的远景图。然后这张地图本身不画任何的图块。
3·去创建一大堆公共事件,他们都是对各个变量的加减操作,像这样:
有增加就有减少,要记得创建对应的减少的公共事件。
还要创建一个返回原来地图的公共事件,内容是:角色透明度正常>关闭禁止使用菜单>传送回到原来地图。(这里默认是从固定的一张地图进入工匠分配界面,一般放置游戏都是这样吧。当然也有随时传送,并回到原来地方的方法,有需要的问我。)
4·在上一张地图放一个事件,内容是:角色透明>禁止使用菜单>传送到这张地图的几个角落。然后在这张地图上放一个自动运行的事件,内容就是加载各种按钮图片和返回原地图的按钮,并将他们定位到他们应该在的位置。然后用PictureCallCommon.js的插件指令,把对应的按钮图片和它对应的增加或者减少某个变量的公共事件关联起来,并将返回按钮图片和返回原地图公共事件联结起来。
5·关键的来了,在地图上创建一个事件,但是不选图像(对,就是一个透明的事件),内容只需要填一条MOG_EventText.js的注释,让它的头顶显示文字就行了,就显示之前该插件的时候替换掉的sosxi呗,默认的MOG_EventText.js插件,应该填入:event text:sosxi 。然后再新建一个事件页,内容和第一页一样,不同的是,出现条件要设置为2号开关开启,开关编号和上面那种公共事件内容图片里的开关编号一样就行。然后就是见证奇迹的时刻。
到这里,只要你的插件没其他冲突,操作都正确,你就可以测试看看了,传送到那张地图,点一点加减按钮,你会发现数值会实时刷新。我只完成了测试,目前还没有做好完整的范例,所以没有范例= =
然后我来说一下机制,因为MOG_EventText.js的标记是写在事件的执行内容中的,所以插件本身就有设计,如果事件换页的话,是会刷新需要显示在事件头上的文字的,而我就是利用了这一点,两页事件的内容完全一样,都是被加入的那句判断替换成了某个变量的值,这样一来,每一次点击按钮触发增加或者减少变量值的公共事件时,发生的事情就是:变量值增减1,2号开关打开或者关闭,而不管2号开关是打开还是关闭,都会导致那个透明的事件,从一个事件页换到另一个事件页,这个时候按照MOG_EventText.js插件自身的逻辑,它需要重新刷新透明事件上面显示的内容,而这个时候变量的值已经发生变化,在这个时候刷新,就会显示新的变量的值。到这里,完成整个想要的效果。
口述比较复杂,希望有需要的小伙伴能够听明白。具体我有机会的话,会做一个范例的。另外,我猜PictureCallCommon.js这个日站的插件很多朋友没有,或者不好找,或者看不明白说明,我自己机翻了一部分说明,我连同脚本一起发上来。
【二】【获取真实世界时间以及放置游戏必备的挂机产生资源系统】
同样,我没有找到这类似的插件,也不会编写,所以我换了一套思路来处理。
首先需要一行代码,是获取真实世界的时间用的:
fun();function fun() {var d=new Date(); var tyear=d.getFullYear(); return tyear ; } 大致来讲就是这一句,这是获取年的。
fun();function fun() {var d=new Date(); var tmonth=d.getMonth()+1; return tmonth ; } 这是获取月的,不知道什么原因,d.getMonth()必须加1,获得的才是真的月份数值。
fun();function fun() {var d=new Date(); var tday=d.getDate(); return tday ; } 这是日期。
fun();function fun() {var d=new Date(); var thour=d.getHours(); return thour ; } 这是小时。
fun();function fun() {var d=new Date(); var tminute=d.getMinutes(); return tminute ; } 这是分钟。
fun();function fun() {var d=new Date(); var tsecond=d.getSeconds(); return tsecond ; } 这是秒数。
接下来会多次用到这6句,而时间内容截图也看不全,所以我先贴出来完整的内容。
这个系统需要两个事件,一个是公共事件,一个是开启这套系统的事件。
开启事件的内容是这样的:
红色框中的就是单纯的开启内容,打开开关是触发自运行公共事件,然后这六句,第一次赋值,赋值每一次获得资源的间隔时间。
公共事件就比较复杂了,因为要考虑到关闭游戏期间依然要计时获得资源,所以这里做的比较复杂。我分段截图。
最基本的,公共事件为并行,开关1开启时运行,整个事件的内容都要套在一个循环中。
青色框中是每一次收获资源的间隔时间,我这里预留了从20秒缩短到15秒和10秒的空间。黑色框是当前的真实世界时间赋值,注意,这里和开启事件赋值时间的时候所赋值的变量是不同的。
这是用来计算两次赋值之间有多少时间的间隔,分别是年,月,日,时,分,秒。所有这些间隔都换算成秒数,备后用,应为没有想到完美的方案,多以,统一了一个月的天数为30天。
这里的黑框,是把所有的间隔时间加起来,再除以每一轮的收获资源的时间,得到两次获取时间之间需要获得多少次资源。这两部分,兼容的下线很长时间,再上线也能获得间隔时间内应该产生的资源。这里的红框是计算间隔这么长时间应该获得的金币的计算,实装的时候这一区段应该会有各种资源的计算,另外这里应该要做一个兼容,就是每一轮产生的金币数,放置游戏的话,产生资源数是会变化的,所以这里还不完整。紫色框是重新赋值时间,获得资源之后,就立即把当前时间复制到初始的那一套变量里。最后,注意整个内容都要放置循环中,放在循环中,循环中。说了3遍所以很重要。
另外说一下,这里除了获得,还有可能失去,就像地下城堡,产生一个铁会消耗2个面板这样,这里就会减少资源。但是一般来讲,资源不足的时候就不会产生对应的资源了,这一点,我还没有特别有效而简洁的方法,容我再思考思考,弄好了我会再次编辑这张帖子,与大家分享、讨论。
今天先到这里吧,2016.12.11-02:38。
PictureCallCommon.zip
2016-12-11 01:55 上传
点击文件名下载附件
7.76 KB, 下载次数: 102
作者:
白嫩白嫩的
时间:
2016-12-11 11:54
感谢楼主大大的分享
作者:
tseyik
时间:
2016-12-11 13:06
PictureCallCommon的作者有一個脚本「ゲーム内時間の導入プラグイン」有取得真实世界时间的功能(預設非實時)
https://raw.githubusercontent.co ... V/master/Chronus.js
トリアコンタン的全部脚本
https://github.com/triacontane/RPGMakerMV
PictureCallCommon.js最新版(1.51)
https://raw.githubusercontent.co ... ictureCallCommon.js
// Version
// 1.5.1 2016/11/20 1.5.0で混入した不要なコードを削除
// 1.5.0 2016/11/19 ピクチャクリック時にコモンイベントではなくスイッチをONにできる機能を追加
// 1.4.0 2016/08/20 ピクチャごとに透明色を考慮するかどうかを設定できる機能を追加
// プラグインを適用していないセーブデータをロードした場合に発生するエラーを修正
// 1.3.5 2016/04/20 リファクタリングによりピクチャの優先順位が逆転していたのをもとに戻した
// 1.3.4 2016/04/08 ピクチャが隣接する状態でマウスオーバーとマウスアウトが正しく機能しない場合がある問題を修正
// 1.3.3 2016/03/19 トリガー条件を満たした場合に以後のタッチ処理を抑制するパラメータを追加
// 1.3.2 2016/02/28 処理の負荷を少し軽減
// 1.3.1 2016/02/21 トリガーにマウスを押したまま移動を追加
// 1.3.0 2016/01/24 ピクチャをなでなでする機能を追加
// トリガーにマウスムーブを追加
// ピクチャが回転しているときに正しく位置を補足できるよう修正
// 1.2.1 2016/01/21 呼び出すコモンイベントの上限を100から1000(DB上の最大値)に修正
// 競合対策(YEP_MessageCore.js)
// 1.2.0 2016/01/14 ホイールクリック、ダブルクリックなどトリガーを10種類に拡充
// 1.1.3 2016/01/02 競合対策(TDDP_BindPicturesToMap.js)
// 1.1.2 2015/12/20 長押しイベント発生時に1秒間のインターバルを設定するよう仕様変更
// 1.1.1 2015/12/10 ピクチャを消去後にマウスオーバーするとエラーになる現象を修正
// 1.1.0 2015/11/23 コモンイベントを呼び出した対象のピクチャ番号を特定する機能を追加
// 設定で透明色を考慮する機能を追加
// トリガーとして「右クリック」や「長押し」を追加
// 1.0.0 2015/11/14 初版
作者:
walf_man
时间:
2016-12-11 14:25
太牛了,这是要做成养成类,或者农场模拟经营类吗?
作者:
79160475
时间:
2016-12-18 11:07
关于楼主,建议你将现在时间先装换为以秒为单位,再减去过去的时间,这样比较简单
作者:
雾影药师
时间:
2016-12-18 11:18
感觉是放置类RPG?
作者:
asvssk
时间:
2016-12-19 18:08
支持!加油!
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1