问一个GM8的房间问题。可不可以让两个房间里的实例同时保持运
gamemaker吧
全部回复
仅看楼主
level 7
lalalacn90 楼主
问一个GM8的房间问题。可不可以让两个房间里的实例同时保持运行?比如我第一个房间设置全局变量money,设置持续。在第二个房间的可见实例里设个时钟,不设持续,每分钟money增加100。这时我再切回第一个房间,但是money却不会再增加了。有没有什么办法让第一个房间继续增加,并且不让第二个房间的实例出现在第一个房间?
2020年04月29日 04点04分 1
吧务
level 13
Q:可不可以让两个房间里的实例同时保持运行?
A:不可以,只有“房间内存在的实例”才会执行相关动作。
Q:比如我第一个房间设置全局变量money,设置持续。
A:不可以,变量没有“持续”属性。但全局变量不会在房间切换时消失。
Q:在第二个房间的可见实例里设个时钟,不设持续,每分钟money增加100。这时我再切回第一个房间,但是money却不会再增加了。
A:理论上这里不单单是“不再增加”,而应该会“回到初始值”,除非你有些地方的描述与制作事实不符。
Q:有没有什么办法让第一个房间继续增加,并且不让第二个房间的实例出现在第一个房间?
A:只要A房间里有实例能确保global.money每分钟增加100,方法实在是太多了……不过我有几个问题要反问:
RQ1:(目的/设计意图)money是在什么时间定义的初始值?
RQ2:(目的/设计意图)money是在什么情况下自行增加,一开始就会还是进过房间2以后才会?
RQ3:(目的/设计意图)money在什么情况下需要回到初始值?
RQ4:(方法/架构)房间1和房间2存在较大的逻辑差异还是仅仅是地图编辑上的“地理位置”差异?//即是否考虑按单个房间来处理
RQ5:(现状/BUG处理)如果是在房间1进行的初始化全局变量/生成某个持续的instance,每次从房间2回到房间1时是否会发生全局变量的值被重置/持续的instance数量增加?
2020年04月29日 07点04分 2
感谢糖豆大大耐心解答,而且答中有问,这样认真严谨让我十分钦佩!第一个问题的解答就解我之难了[太开心]谢谢啦!
2020年04月30日 10点04分
level 4
楼上吧主大大已经回答不可以了。。
不过,仔细看了下楼楼的问题,我猜测下你的目的,你是希望在特定房间内获得一个buff对吗?
那么这种的常见做法是不是可以换个思路解决,直接把代码写在人物的object身上,通过判定当前所在房间来增加buff,
比如
if(当前房间 == 增加money的房间){
timer += 1;
if(timer == 3600){
money += 100;
timer = 0;
}
}
2020年04月29日 11点04分 3
谢谢!你让我又学到了不用时钟的方法[哈哈]
2020年04月30日 10点04分
回复 lalalacn90 :不用谢,但是这种办法实际上不是个好主意。。。尤其是你要做一些稍微大型的游戏的时候,今年荒野大镖客刚出pc的时候就出现过,因为根据游戏的帧数不能,里面的BUFF持续时间竟然也不同,明显是跟咱们用了一样**的办法了。。。。
2020年04月30日 14点04分
level 7
lalalacn90 楼主
嗯,知道两个房间的实例不可同时运行就好了。我的设置是这样的,在第一个房间里放一个不可见的实例,让它持续,命名全局变量money,并且把money的数值绘制在房间上方。然后设置一个按钮点击就会切换到第二个房间。第二个房间里放一个实例,每十秒增加50money,并且也设置按钮可以回到第一个房间。这样只要在第二个房间money每十秒就会增加50,切回第一个界面后,money不会回到初始值,但是也不会再增加。我现在明白了只有当前房间的实例会运行就可以了,我就麻烦点,给那个实例设置持续,让实例在第一个房间不可见在第二个房间可见。
2020年04月30日 10点04分 4
level 11
让两个房间的实例同时运行有一个很邪道的方法。
给每一个实例都写上一个变量_room,用来保存它们所在的房间,在执行各种事件的时候如果当前房间不是那个房间的话就直接返回,并且全部都勾选保持。
在碰撞啥的时候,检测_room不一样就不碰撞。(最好别使用默认的碰撞函数,会出大问题)
不过鉴于这种方法特别麻烦,而且会导致有大量实例,所以想想就好。
2020年04月30日 11点04分 5
1