最近发现object_add()好象真的不能用太多啊
gamemaker吧
全部回复
仅看楼主
level 8
anheimfb 楼主
作了个显示出血量的脚本 用了object_add()
结果发现代码调用很多次之后 就一卡一卡的了
不用这个脚本就恢复正常了 难道是我心理作用吗。。还是有些用法不太恰当
顺便问下 这个object_add() 函数什么情况下用比较合理?
2014年11月28日 16点11分 1
level 10
创建动态物件时,也就是从外部导入物件,平常没多大用处
2014年11月29日 00点11分 2
从外部导入物件是指导入object吗,我 感觉object_add()可以把一些对象封装到脚本里(比如各种属性攻击出现的打击效果), 这样就不用给每个特效都做一个对象了,游戏做大些的话整理起来也容易,要不几十个对象修改加编辑很麻烦,放在脚本里一目了然。但是好像object_add()用多了会卡,有点不敢用了
2014年11月29日 01点11分
回复 anheimfb :嗯,还有就是将物件放进文档里,要调试游戏时直接改变文档里的代码不需要关闭游戏。
2014年11月29日 01点11分
回复 yiwei138 :是啊 好方便啊 可惜object_add()调用多了好像会卡。。是我的用法不恰当吗。。
2014年11月29日 02点11分
吧务
level 13
先说好咱没用过object_add(),不过从LZ的代码截图和咱对二进制的亲和力来推测呢……
LZ还是在游戏初始化时针对所有可能的类型全部object_add()一遍,然后每次调用时instance_create(...)对应的实例吧。
至于理论依据,我找找GML里的原文哈……
2014年11月29日 07点11分 3
吧务
level 13
九、改变资源
这些函数只能在GameMaker注册版本中使用
游戏运行时可以创建新的资源。当然也可以改变现有的资源。这章就是描述这种可能性。游戏中改变资源容易引起严重错误!!!请注意。改变资源时必须遵守下列规则::
* 不要改变正在使用的资源。这会引发错误!例如,正在使用一个实例时不能改变它的精灵。.
* 储存游戏时,添加和改变资源不会被储存在游戏中。所以如果你稍后读取存档,这些都不再存在。一般来说,当你在操作资源时不能使用系统内建的读取和储存游戏.
* 游戏重启时,改变的资源不再储存为他们的原始形态。一般来说,当你在操作资源时不能使用动作库或函数来重启游戏。
* 资源操作是缓慢进行的。例如,改变精灵或背景是相当慢的。所以不要在游戏进行时使用。
* 游戏进行时创建资源(特别是精灵和背景)很容易就耗用了大量内存。所以要非常小心处理。例如,如果你有一个32帧128x128的动画精灵,决定创建它的36个旋转的拷贝,你将耗费36x32x128x128x4= 36 MB内存!
* 确保删除不再使用的资源。否则系统很快就要内存溢出了。
//注意上面的第4星号
下列程序用于灵巧的创建对象。如同所有的改变资源的程序,你得非常小心不要一直创建新的对象 。
object_add()添加一个新的对象。返回对象的索引。
//不要一直用,特别是LZ这样同样的物体要创建好几遍的。
那么,咱的看法还是,LZ用instance_create(...)就够了,至少说截图里object_event_add也没增加什么动态的东西,全是静态的。
2014年11月29日 07点11分 4
我 好像明白一些了 我用的是 instance_destroy()删除的是实例 ,不是对象,也就是说调用object_add()很多次之后,实例是都销毁了,对象加了一大堆。 最后再加个object_delete()应该就解决了[太开心] 这问题困扰我2天了 非常感谢
2014年11月29日 09点11分
回复 anheimfb :咱只是想说,从LZ的代码来看,这里根本没必要新建对象。实例能解决的事偏要用对象,快捷方式能解决的事偏要复制文件,模拟器能解决的事偏要做多系统,多用户能解决的事偏要再加几台电脑……
2014年12月02日 03点12分
level 8
anheimfb 楼主
回复 q糖豆p :只是 一个技能就要创建3,4个不同对象的实例, 技能做多了, 再加上界面的对象,敌人,npc,光用gm里的对象文件夹整理感觉很困难,光是要找一个对象修整就要找一会,还要考虑和其他的对象的联系。。最近做了5,6个技能就感觉有些崩溃,单独做一样功能很容易,都放一起感觉就需要一个整理程序的方法了。
然后就想到用object_add()把对象以脚本代码的形式保存,不过这个方法好象确实有些欠妥,只是创建个实例就需要不停的创建和销毁对象。。
如果有类似sprite_add的函数把对象放在gm外面就好了 ,或者数据库能解决整理程序的问题?ini和文件读取 也看了,dll好象超出我的能力了,还是没想到什么好办法。。
@q糖豆p
2014年12月02日 06点12分 5
吧务
level 13
所有的“对象”应该在游戏开始前完成,游戏开始后只对实例进行操作,那么……
除了自带的LOADING外,你还需要一个自己的LOADING过程,将所有可能用到的object_add()都先做好。或者考虑每个关卡进行一次这个过程。
2014年12月02日 08点12分 6
感觉工作量也不小,以后尝试一下
2014年12月04日 07点12分
level 8
表示电脑本来就很卡……
2014年12月06日 09点12分 7
1