好东西啊,果断顶,对于我们新手来说真是学习的好帖子,支持楼主 |
本帖最后由 fux2 于 2014-4-14 08:19 编辑 如果刷新放在事件里面过了地图这个窗口不是泄露了么,win7下停止工作什么的。 另外每帧refresh你在差点的机器上就能发现很明显的卡顿,正确做法是记录需要描绘的数值,发生变动才描绘。 当然你这里的refresh相当于把update和refresh写到一起了, refresh的作用如字面一样是刷新,重新描绘,update是用于检查更新。 以下给出一个范例。
|
提供几个建议: 1.没有必要将hp设置为attr_accessor,因为在这里你不希望外界用圆点运算符"."对实例变量进行操作,而且整个过程中也没有用到$w.hp这样的语句,应该删去。 2.没有必要将宽度w设置为实例变量,在这里设置一个局部临时变量w就可以了。 3.建议刷新的内容全部放到update中去,refresh只是单纯的描绘作用,因为面向对象编程讲究看标识符知其含义,因此在地图用update不变,重写MapStatus的update方法,这是写脚本的一个好习惯。 另外提醒一下3L的朋友,Hp和Sp有所不同,最大Sp允许取0值,因此计算宽度的时候,如果遇到无Sp的角色会发生除0错误,在这里改一下以增强代码安全性。 |
参与人数 2 | 星屑 +112 | 收起 理由 |
---|---|---|
heiwang1997 | + 12 | 我很赞同 |
怪蜀黍 | + 100 | 认真评论奖 |
本帖最后由 天地有正气 于 2014-4-7 20:00 编辑 现在我们写的血条脚本,只能通过地图上的事件来显示。而且血条会把菜单什么的都遮住,很不爽。 我将告诉大家怎么来把血条的生成,刷新都写在脚本里。 首先介绍alias的用法。 alias的用处是把脚本降低冲突率,完全“插件”化。 比如说,小周定义了一个类: class XiaoZhou def damage $hp -= 100 end end 而P叔(@protosssonny )也定义了一个类,是 class XiaoZhou def damage p "你受伤了!" end end 但是两个定义冲突了,P叔把小周的定义的方法damage重定义了一遍,于是小周就不会-hp了。 聪明的P叔想了一个办法,他用alias避免了冲突: class XiaoZhou alias xz_damage damage def damage p "你受伤了!" xz_damage end end 当使用alias后,xz_damage 相当于完全复制了damage,然后P叔重新定义damage,之后在调用xz_damage,这样就避免了冲突。 把窗口的生成、释放、刷新写在Scene_Map里,如果不用alias,就要重新复制一遍main、update这两个方法,麻烦不说,还有很大的冲突率。 于是我们要用alias。
|
交作业啦! 还有脚本: 先@w RUBY 代码复制
|
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-29 01:07
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.