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

Project1

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

关于精灵Sprite的问题

 关闭 [复制链接]

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
跳转到指定楼层
1
发表于 2009-4-26 20:20:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
试验人家的五子棋脚本
@white = Sprite.new
@white.bitmap = Bitmap.new("Graphics/Pictures/white")
@white .z = 9999

  1. Bitmap
  2. 位图的类。所谓位图即表示图像其本身。

  3. 为了在画面中显示位图必需要使用精灵(Sprite)等。
复制代码


范例中棋子使用的 @black=Bitmap.new('Graphics/Pictures/black') 就没有精灵

如果用 for i in 1..255
         @white= Sprite.new
做的话
就会依次出现


白棋子有

白棋子也还有

白棋子消失了 = =

请问这是什么原因 和http://rpg.blue/web/htm/news747.htm有关系么?
是不是RM 隔段时间就会清除不用的精灵?

如果要用 @white = Sprite.new
@white.bitmap = Bitmap.new("Graphics/Pictures/white")
的方法 实现棋子放下不消失的效果 怎么弄?

顺便请教 Input.press? Input.trigger? Input.repeat?
三者的区别

工程:http://rpg.blue/upload_program/d/redant_五子_121177227.rar

版务信息:本贴由楼主自主结贴~
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址

Lv1.梦旅人

梦石
0
星屑
60
在线时间
41 小时
注册时间
2008-3-5
帖子
2072
2
发表于 2009-4-26 20:35:09 | 只看该作者
用数组啊用数组
你这样重定义@white,老的sprite就没了,就向你说的,过会RM会给清理掉。

按下,触发,再次触发
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
你它囧一字母君谁记得……
当时那把剑离我的喉咙只有0.01工分。可是一柱香之后,这个女主人会深深的爱上我,虽然本人平生说了无数的谎话,可是这句最有效:“你应该这么做,我也应该死。
曾经有一取ID的机会放在我面前,我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此。你的剑在我的咽喉上割下去吧!不用再犹豫了!如果上天能够给我一个再来一次的机会,我绝对会取个汉字君。如果非要给这ID加点修饰的话,我希望是……红色加粗……

回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
3
 楼主| 发表于 2009-4-26 21:14:19 | 只看该作者

for i in 1..255
      @white= Sprite.new
      @white.z =9999
      @white.bitmap=Bitmap.new('Graphics/Pictures/white')
      @white.x =144+32*(@st_x-1)
      @white.y = 32*(@st_y-1)
  end

就会出现 图上 过一会儿 才消失掉的效果

用@white的话 是马上消失  (白棋子永远是一个)
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
4
 楼主| 发表于 2009-4-26 21:16:28 | 只看该作者

for i in 1..255
      @white= Sprite.new
      @white.z =9999
      @white.bitmap=Bitmap.new('Graphics/Pictures/white')
      @white.x =144+32*(@st_x-1)
      @white.y = 32*(@st_y-1)
  end

就会出现 图上 过一会儿 才消失掉的效果

用@white的话 是马上消失  (白棋子永远是一个)
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
5
发表于 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感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦·贤者

梦石
0
星屑
50
在线时间
1141 小时
注册时间
2007-12-15
帖子
4100
6
发表于 2009-4-26 21:32:44 | 只看该作者
再次受教了,原来Input.press? Input.trigger? Input.repeat? 这个一直搞不清楚
http://rpg.blue/home.php?mod=space&uid=34951&do=blog&id=12799
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-3-14
帖子
11
7
发表于 2009-4-26 21:58:27 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 06:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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