有一个关于对象间的step事件执行顺序的问题
gamemaker吧
全部回复
仅看楼主
level 8
anheimfb 楼主
对象间的step事件执行顺序好象是按照对象的创建顺序执行的(就是添加对象的先后顺序)。
但是项目做大之后,对象会很多,如果是创建顺序导致的结果错误会很难找到错误的地方。
有没有什么方法,可以避免因为创建顺序的问题而出错,比如一些写代码的技巧,方式?
下面是个简化的为了表明问题的代码
///////////////////////////////////////////////
对象lv:
step事件:
if keyboard_check(vk_right)
lan.hspeed=4
if keyboard_check(vk_left)
lan.hspeed=-4
///////////////////////////////////////////////////////
对象lan:
step事件:
vspeed=0
hspeed=0
/////////////////////////////////////////////////
这里如果先添加对象lv,然后添加lan。结果按键,lan不会动
这里如果先添加对象lan,然后添加lv。结果按键,lan就会动
这个代码只是为了表明可能出的相同原因的类似问题。
最后我只是想问:
有没有什么方法,可以避免因为创建顺序的问题而出错(添加对象的先后顺序),比如一些写代码的技巧,方式?
2014年09月27日 11点09分 1
level 10
你可以把lv对象的创建放进lan对象的create事件里。这样就可以有一个顺序,而lv对象的create里也可以创建第三个对象。
2014年09月27日 11点09分 2
有没有一种写代码的方式,就是不管对象添加在先还是在后,最后执行都是一个结果的?因为不想把对象的执行顺序考虑进去,如果有几十个对象的话,修整起来也会很麻烦,还要记住住各个的顺序。
2014年09月27日 11点09分
回复 anheimfb :如果你用的是GMS的话,在room里有物件顺序设置。GM的话比较麻烦
2014年09月27日 11点09分
额 刚才我试了一下你的方法(lan的create事件里用instance_create(x+100,y,lv)),结果程序自己关闭了。。
2014年09月27日 11点09分
回复 yiwei138 :哦 gms还有这功能,不过我还是喜欢封装感觉,对象能不受顺序影响最好了
2014年09月27日 11点09分
level 10
你可以这样试试:
对象lan的step事件里:
if !keyboard_key_pressed(vk_left) or !keyboard_key_pressed(vk_right)
{
hspeed = 0
}
2014年09月27日 13点09分 3
恩 这算是最朴实的方法拉,实际情况的时候还有一些各种技能的碰撞判定,操作判定,还有浮空后的攻击判定,倒地之后的攻击判定,还有被打到的技能特效 。这样估计要写if了[汗]
2014年09月27日 13点09分
回复 anheimfb :估计要写很多 if了,对了 还有一些物理效果
2014年09月27日 14点09分
level 8
anheimfb 楼主
发现把代码放在beginstep, endstep,draw事件里 也算是个凑合的方法,小程度上可以不用管对象创建的顺序
2014年09月27日 14点09分 4
1