赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
上面只用一个 @sprite 的时候,落子的时候直接移动了 @sprite 指向的 Sprite 对象,就相当于拿起了你之前落的那一子移动到了别处;
循环产生 Sprite 数组那一段,一开始生成 100 多个 Sprite 在同一点上,下面 pawn_move 里面每次落子都把那 100 多个精灵重新指向到新的对象,这样之前的 100 多个对象都失去了引用,所以会被 Ruby 的垃圾回收机制回收~
这个机制是这样的:
当没有引用(或是说引用的生命周期结束了)保存某对象的时候,该对象占用的内存就会自动被回收,这种机制可以让写程序的人不用考虑堆中的内存泄漏问题~
Sprite.new # <--- 无引用
spr = Sprite.new # <--- 有引用 spr = Sprite.new # 第一个 Sprite 对象
spr = Sprite.new # 重新指向第二个 Sprite 对象,第一个 Sprite 对象失去了引用
当然也有例外——如果使用了 WeekRef 将引用设置为一个“弱引用”的话,即便这个引用仍然指向某个对象,该对象还是会被回收~
第二个问题 F1 帮助文档中说的还是比较清楚的:
press? 判断是否按下:
举个例子:调试运行游戏工程时,地图中按住 F9,这时 DEBUG 用的窗口出现了,按 X ,窗口消失但马上又出现了,这就是因为 F9 一直处于按下状态,所以 press? 一直返回 true
trigger? 仅仅判断按下的瞬间:
也就是第一次按下时返回 true,之后即便还是按下状态也会返回 false~
像在地图上按住 X 弹出菜单,弹出之后 X 虽然还是按下状态,但 trigger? 返回的已经是 false 了,否则菜单就会一直重复打开/关闭
repeat? 判断某键是否按下一段时间后仍然按下:
Window_Selectable 有这个函数的应用,方向键按住一段时间后就会迅速往一个方向切换选项~ 系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~ 系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~ |
|