GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

190 信息 1080 成员
游戏开发工具 GameMaker Studio 2 的讨论小组

请教点GUI方面的问题,关于DRAW GUI耗费的性能是否比直接做成背景贴图要大很多?

Rusty 2018-03-23

如题,在设计GUI时因个人喜好原因,给画面上下加了很大的边框,于是问题来了:

1.直接将一个宽度为360,高度为100左右的图片素材作为GUI素材绘制(色彩比较少所以实际并不算大),是否比直接通过内置的绘图程序绘制大面积的色块区域,然后再导入边角装饰的线条之类,耗费的性能大得多?如果有差但差别不大的话我就打算直接用简单粗暴的方法搞算了……

2.如果直接将这部分直接贴到背景图层上,耗费的资源是否要比通过DRAW GUI绘制要小得多?(啊嘞?背景图层能不能放到实例图层上面来着?忘记了……)

以上,望知道的大佬解惑,手动比心

近期喜欢的会员

 
顺子 2018-03-29

还真没试过,但应该可以用debug模式观察一下内存的消耗情况吧

 
Rusty 2018-04-01
顺子 感谢,试了下,感觉低像素游戏这方面可以偷个懒,还顺便发现了一处因为deactivate而导致的莫名其妙的内存溢出……
 
顺子 2018-04-02

Rusty 游戏规模不是太大的话感觉应该不至于拖垮现在的设备,毕竟性能都过得去了,怎么个莫名其妙能仔细说说看么,万一以后遇到这个坑就能预防一下了XDDD

 
Rusty 2018-04-02

顺子 额,就是因为排查不出原因,所以才莫名其妙,现在手头没代码,大致结构是这样

if instance_exist(mouse_x, mouse_y, obj_button)

{

  if mouse_check_button_released (mb_left)

  {

    if obj_game.paused = false;

    {

      obj_game.paused = true;

      instance_deactivate_layer("Instances");

      instance_create_layer(target_x, target_y,"Instances", obj_box); 

    }

  } else...

}

作用就是当我用鼠标点击某按钮时,Instance层上的对象暂停活动,然后弹出obj_box显示道具或者信息什么的,结果每次点这个按钮后内存都会不断变大……

这串代码用//注释掉instance_deactivate_layer("Instances")后,内存就正常了……

按理说,毛病可能是出在obj_box在不断创建ds之类数据导致的?然而仔细查找也并没有,draw_gui事件里都是在调取非Instance图层的obj_data里的……

而且用//注释掉instance_create_layer(target_x, target_y,"Instances", obj_box),按了按钮后内存依然不断变大……

所以这里单纯用instance_deactivate_layer("Instances")就会导致内存溢出……

然后想,难道是出在instance_deactivate_layer("Instances")本身影响了非Instances层的其他脚本工作?

但是在obj_game的step里直接用esc来触发instance_deactivate_layer("Instances"),又没有内存溢出问题……

所以一直没弄明白到这个毛病到底出在哪里,不过本来游戏就是类似roguelike的回合制,只要禁用掉某些东西一样可以实现暂停效果,想了想万一是引擎的BUG这么一直找原因岂不是浪费时间,就干脆换了种方式……

 
顺子 2018-04-02

Rusty 原来如此……可能是哪里有互相影响,可能需要仔细排查才能找到原因了,可能不是通行的问题吧~

 
Rusty 2018-04-02

顺子 是的,不过感觉如果游戏机制允许的话,比如回合制,instance_deactivate类值得考虑用别的方式代替……

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册