gms2游戏移植linux,【即看即用】在gms2里的对象池实现脚本

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

感谢@sunyubokkkkk 的建议,这里更新一下调用了创建事件和销毁事件的新代码,现在在步事件中不需要用那个key_start自己写创建和销毁的代码了

另外为ObjectPool_checkIn脚本添加了对零参输入的兼容,不输入参数会跟instance_destroy一样直接销毁实例自己

————————————ObjectPool_checkOut————————————

//instance_create_depth一样的参数输入

var tx=argument0,ty=argument1,tdepth=argument2,tobj=argument3,tid

//以Object_index为索引在字典里找对应的对象池

var ObjectPool = ds_map_find_value(global.ObjectPool_map, tobj)

//如果没找到,就新建一个对象池堆栈

if is_undefined(ObjectPool){

ObjectPool=ds_stack_create()

global.ObjectPool_map[? tobj]=ObjectPool

}

//如果该对象池里没货了,就新建一个实例

if (ds_stack_empty(ObjectPool)){

tid=instance_create_depth(tx,ty,tdepth,tobj)

}

else{//否则从对象池堆栈里弹出一个空闲实例

tid=ds_stack_pop(ObjectPool)

if !instance_exists(tid) //如果这个实例没了(比如转移场景会清除所有冻结实例),就新建一个

tid=instance_create_depth(tx,ty,tdepth,tobj)

else{//否则解冻它并手动初始化值

instance_activate_object(tid)

tid.x=tx//初始化赋值

tid.y=ty

tid.depth=tdepth

}

}

//调用实例的创建事件

with(tid)event_perform(ev_create,0)

//返回可用实例id

return tid

————————————ObjectPool_checkIn————————————

//输入参数为用完了的实例id

var tid=id

if argument_count==1 tid=argument[0]

//调用实例的销毁事件

with(tid)event_perform(ev_destroy,0)

//找到对象池

var ObjectPool=global.ObjectPool_map[? tid.object_index]

//冻结实例之后把它放到对象池里

instance_deactivate_object(tid)

ds_stack_push(ObjectPool,tid)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值