KCDDP ADV综合创作站 » 基础技术区 » [已解决]f中对class变量的存取问题


2008-7-18 00:26 sjmind
[已解决]f中对class变量的存取问题

里面的ItemL是一个自定义的class类型
load之后说“访问了null对象”
应该就是没有把f.IL读进来
IL的数据主体是一个数组,几个整型
能不能做到不管在那里save,总能正确的load

first.ks:

@call storage="initsys.ks"

*start
;@advl
欢迎来到Kirikiri/KAG的世界![l][r]
这次是对物品道具或任务列表等的ItemList进行测试.[l][r]
初始的测试数据为{0,0,1,1,2} [l][r]
[iscript]
f.IL=new ItemArray();
f.IL.Add(0);
f.IL.Add(0);
f.IL.Add(1);
f.IL.Add(1);
f.IL.Add(2);
//f.IL=global.ItemL;
[endscript]
变量初始完成[l][r]
ItemL中存在#1共
@emb exp="f.IL.GetItemCount(1);"
@emb exp="f.IL"

[r]
@outputItemL
[p]
*uc0
@save ask="true" place="1"
*uc1
存档点后增加#1*1[l][r]
[iscript]
f.IL.Add(1);
[endscript]
@outputItemL
[l][r]
@load ask="true" place="1"
@s


然后是存档data1.kdt的相关部分:


"user" => %[
  "IL" => null /* (object) "(object 0x01616B74:0x01616B74)" */
],

就是这里永远是null.

[[i] 本帖最后由 sjmind 于 2008-7-18 11:20 编辑 [/i]]

2008-7-18 11:19 sjmind
KAG中的save的确是将f中class对象进行了保存
但class的变量的实质是一个指针
而f的实质是个dictionary,其对class的变量的存储实际上是保存了一个指针
所以load之后原指针指向的地方一定为null
解决方案就是不要在f中使用class的变量

2008-7-18 17:25 全局变量D
嗯,这个问题也困扰了我很多年...用字典就好了...

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.