设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1817|回复: 6
打印 上一主题 下一主题

关于精灵Sprite的问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
1
发表于 2009-4-26 21:30:21 | 显示全部楼层
上面只用一个 @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感谢您的热情解答~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-15 14:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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