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

Project1

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

[已经解决] 求教一个脚本问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
帖子
36
跳转到指定楼层
1
发表于 2012-10-8 14:13:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RUBY 代码复制
  1. def add_usr_sprite(game_character)
  2.     char=Sprite_Character.new(@viewport1,game_character);
  3.     @character_sprites.push(char);
  4.     return char;
  5.   end
  6.  
  7.   def del_usr_sprite(char)
  8.     char.dispose();
  9.     @character_sprites.delete(char);
  10.   end

然后我按下面方法调用
@char=add_usr_sprite(@game_char);
del_usr_sprite(@char);

会不会出现char.dispose执行的不是数组中的元素的dispose啊,数组中存的是指针还是什么东西哦?求教啊。


‘‘──qbjxiaolei于2012-10-8 14:14补充以下内容:

大哥大姐们,新人求教啊{:4_96:}
’’

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
2
发表于 2012-10-8 14:16:41 | 只看该作者
是指针无误,然后dispose后面不用加括号- -b

点评

[url=home.php?mod=space&username=Luciffer]@Luciffer[/url][url=home.php?mod=space&username=delv25]@delv25[/url]  发表于 2012-10-9 12:36
请求斑竹给此楼的同学多些奖励,虽然和P叔辩论了一番,最终发现说不同的对象,但是在学术上就是需要这样的辩论精神。此同学回答得很好。喵。  发表于 2012-10-9 12:36
ide自动加的我无话可说,自己硬加上以示美观我觉得纯粹脑抽...  发表于 2012-10-8 15:36
嗷呜,加括号没错,LZ更加规范地声明了这里调用了没有参数的方法:dispose。其实个人认为加括号是一种更加明确的表达。  发表于 2012-10-8 14:37

评分

参与人数 1星屑 +200 收起 理由
咕噜 + 200 精品文章

查看全部评分

好歹当年也当过大魔王过,orz
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
帖子
36
3
 楼主| 发表于 2012-10-8 14:27:13 | 只看该作者
谢了!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4644
在线时间
5238 小时
注册时间
2009-4-29
帖子
14318

贵宾

4
发表于 2012-10-8 14:32:02 | 只看该作者
这种菜应该没人抢吧?料想一定不会有人的,那么P叔抢了。好饿呀。

先回答主题:char.dispose的确不是数组中的元素的dispose

这里有问题哈,add_usr_sprite(game_character)的返回值是return char,而不是数组@character_sprites的某个元素!

因此:
这时@char是Sprite_Character.new(@viewport1,game_character),不是数组哦。
这时@character_sprites是[@char]

你再del_usr_sprite(char),形参char是被@char所代,char.dispose,这时dispose的主体是@char,而不是数组@character_sprites中的元素。
那么@character_sprites.delete(@char)的确是删除了数组@character_sprites中的元素。

定义del_usr_sprite中的这两个操作并不是同一个对象,第一个是@char,第二个是@character_sprites。

建议,你在混淆的时候用p @character_sprites 和 p @char来查看你的变量实际值。

评分

参与人数 1星屑 +200 收起 理由
咕噜 + 200 认可答案

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
5
发表于 2012-10-8 14:45:37 | 只看该作者
protosssonny 发表于 2012-10-8 14:32
这种菜应该没人抢吧?料想一定不会有人的,那么P叔抢了。好饿呀。

先回答主题:char.dispose的确 ...

- -b建议ls试验下,@char里存的就是指向@character_sprites中末尾元素的指针,数组的push方法不生成新对象...
好歹当年也当过大魔王过,orz
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
帖子
36
6
 楼主| 发表于 2012-10-8 14:54:02 | 只看该作者
感觉不用指针反而有点搞不懂了,return的时候会产生新对象吗?

点评

不会+1- -b  发表于 2012-10-8 15:10
不会- -b  发表于 2012-10-8 14:56
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4644
在线时间
5238 小时
注册时间
2009-4-29
帖子
14318

贵宾

7
发表于 2012-10-8 15:09:23 | 只看该作者
zhangbanxian 发表于 2012-10-8 14:45
- -b建议ls试验下,@char里存的就是指向@character_sprites中末尾元素的指针,数组的push方法不生成新对 ...

脚本设计:


执行情况:
第一个p的情况:

第二个p的情况,以下是push方法生成了新对象的证据:

第三个p的情况:

第四个p的情况,push生成的对象已经被delete了:

嗷呜

点评

- -b你不是搬起石头砸自己的脚么...p 出来的不是同一个对象是什么?  发表于 2012-10-8 15:13

评分

参与人数 1梦石 +2 收起 理由
咕噜 + 2 认可答案 附赠66RPG提供的好人卡一张^ ^.

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-10-1
帖子
36
8
 楼主| 发表于 2012-10-8 15:15:30 | 只看该作者
恩,我看懂了,应该还是释放正确了的代码。看来返回对象也是返回的指针之类的。。。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4644
在线时间
5238 小时
注册时间
2009-4-29
帖子
14318

贵宾

9
发表于 2012-10-8 15:23:30 | 只看该作者
zhangbanxian 发表于 2012-10-8 14:45
- -b建议ls试验下,@char里存的就是指向@character_sprites中末尾元素的指针,数组的push方法不生成新对 ...

晕死,我说的对象和你说的对象是2个不同的东西。你说的都是0x1145a90这个东西,我说的是对象分别指
def del_usr_sprite 中的2句话:
  1. char.dispose();
  2. @character_sprites.delete(char);
复制代码
第一句中的对象是char,是被dispose的对象
第二句中的对象是@character_sprites,是被delete的对象

点评

- -b那你想说明什么?第一步是char在dispoise,然后第二步是@character_sprites清除了char的指针?我觉得lz在意的是这句话写没写对吧...  发表于 2012-10-8 15:33
只有一个Sprite_Character.new(@viewport1,game_character),怎么可能生成2个对象嘛(这里是你所谓的对象)。  发表于 2012-10-8 15:25
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4644
在线时间
5238 小时
注册时间
2009-4-29
帖子
14318

贵宾

10
发表于 2012-10-8 15:46:37 | 只看该作者
zhangbanxian 发表于 2012-10-8 14:45
- -b建议ls试验下,@char里存的就是指向@character_sprites中末尾元素的指针,数组的push方法不生成新对 ...

关于点评:“- -b那你想说明什么?第一步是char在dispose,然后第二步是@character_sprites清除了char的指针?我觉得lz在意的是这句话写没写对吧”的回答:
嗷呜,是这样的啊,你总结得很好啊。
我其实就想说明LZ的脚本返回了一个不必要返回的东西return char,结果导致了
  1. char.dispose();
  2. @character_sprites.delete(char)
复制代码
操作了2个不同的主体(我不说对象了,免得又混淆)
因为从第2个函数我们看得出LZ的初衷就是想对@character_sprites中的元素进行dipose和delete。我就是想说这个。
  1. def add_usr_sprite(game_character)
  2.   char=Sprite_Character.new(@viewport1,game_character);
  3.   @character_sprites.push(char);
  4.   return @character_sprites #如果变成这样我就没话说了
  5. end
复制代码
喵~~~

评分

参与人数 2星屑 +160 梦石 +2 收起 理由
Luciffer + 2 认可答案
咕噜 + 160 精品文章

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-28 06:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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