请问GML运行代码有顺序吗?
yishalee 我还没时间玩 GMS,不过看第二段代码,好象是在循环内,每次都先更改为站立状态,然后才去判断按键。
那么在判断按键之前,总会先设置站立,然后才去设置相应的行走,这不正好就是你出现的问题:闪动么?
另外第一段,觉得这样好一些:
if KeyPressed('A') { directionChangeTo('LEFT'); speed = -1; } else if KeyPressed('D') { directionChangeTo('RIGHT'); speed = 1; } else { directionChangeTo('STAND'); speed = 0; } move();
抱歉,我并不写 GML,也没去了解它的运行机制,所以仅供参考啦。
第二张图运动速度是否正常?sprite站立的话dx应该是0的,按说step应该是整段算完才会输出的,这个step下面还有别的代码么?
用
dx=0;
sprite_index=sprite0;
if keyboard_check(ord("A")){
sprite_index=sprite1;
dx=1;}
x+=dx;
试了下如果if正常执行的话开头的东西应该不会影响的,是不是你其他地方有什么会影响state状态的东西?
eastecho 茶多酚 多谢帮助,这个问题终于弄明白了。首先GMS是先把代码运行完再把最终结果画到屏幕上,这样看来两张图的代码都没有问题。
的确,问题不在这里。问题是我的行走图有4张子图(即spr_player_walk的image_index最大值为3),而站立图只有一张子图(即spr_player_stand 的 image_index最大就是0)。GMS里当改变一个object的sprite的时候,image_index(需要让电脑显示第几张子图)是会继承过去的,但是如果当前image_index超过了新sprite的最大image_index,则image_index会归零。
当我按住一个方向键,walk的image_index会每一帧都增加0.05,只要他小于1,则画出来的都是行走图的0号子图。知道有一步这个值超过了1,那么这一步结束后画出来的就是行走图的1号子图。但是下一帧在代码开头sprite换成了站立图,由于站立图只有0号子图没有1号子图,所以image_index在这一行代码里被归零,于是每隔若干步小人会有一瞬间行走图的1号子图,然后下一步立刻变回0号子图。
按照事件顺序再安装代码上倒下的顺序然后还有实例的运行顺序
球解惑。