如何修复:代码不在某些框架上运行

时间:2019-09-21 04:01:13

标签: gml

我一直试图让我的角色在动画的特定帧上射击弹丸。但是,有时它可以工作,而有时它只是忽略了创建射弹。

我尝试使用警报而不是检查图像索引,但是我无法将计时器调低到无法获得完美定时的程度。

我认为图像速度为0.2而不是1可能是个问题。

我正在使用状态机来使其在移动和拍摄之间切换,但是我检查了一下,状态切换不是问题,因为它会在需要时改变。

以下是拍摄状态下的相关代码:

if image_index == 2 {
   instance_create(x+20*image_xscale,y,obj_projectile);
}

以下是将坦克从主要状态转换为射击状态的代码:

if key_shoot{
   state = states.shoot;
   image_speed = 0.2;
   sprite_index = spr_tankShoot;
}

对象中还有一个动画结束事件,其代码如下:

if sprite_index == spr_tankShoot{
   state = states.normal;
}

如果任何人都可以看到代码中的某些错误和/或知道该错误可能出在哪里,那么将不胜感激。

1 个答案:

答案 0 :(得分:0)

  

我认为图像速度为0.2而不是1可能是个问题。

这是可能的-如果您的动画具有不同的速度,并且您不倾向于在动画开始时重置image_index,则可能会以不同的开始索引(假设为0.1)结束,而当将0.2添加到时,该索引不会恰好等于2.0他们。通常,检查框架是否为数字通常不是一个好习惯。

您可以将image_index存储在帧的末尾以供将来参考,

image_index_previous = image_index;

,然后检查image_index自上一帧以来是否超过了2:

if image_index_previous < 2 && image_index >= 2 {
   instance_create(x+20*image_xscale,y,obj_projectile);
}