我看到你遇到了一个复杂的问题,但我还是会尝试帮你解决这个问题。

根据你提供的代码和描述,我认为你想实现一个淡色效果来指示玩家瞄准的方向。然而,你的当前实现是使用一个预设的图片(spr_laser_head)和一个动态图片(spr_laser_body)来显示射线。这个实现中,你使用了一个自定义的draw_sprite_ext函数来绘制射线。

为了帮助你实现一个更为smooth的淡色效果,我想建议你使用一个像素精灵的序列来表示射线效果。这可以通过使用一个小的精灵来绘制射线的每个点,从而实现一个逐步变色的效果。

下面是一个基本示例来实现上述功能:

// =======================
// Lazer Beam Effect
// =======================
if (laser_time > 0) then
    var dir = laser_dir
    var start_x = x + lengthdir_x(90, dir)
    var start_y = y + lengthdir_y(90, dir)
    var beam_len = 3000

    var scale = beam_len / sprite_get_width(spr_laser_small)

    for var i = 0; i<=beam_len; i++
        var px = start_x + lengthdir_x(i, dir)
        var py = start_y + lengthdir_y(i, dir)
        draw_sprite_ext(spr_laser_small, 0, px, py, 1, 1, dir, c_white, 1 + (laser_time / 100 * 0.5))
    end
end

在上述示例中,我们使用了一个叫spr_laser_small的小精灵来表示每个点。我们使用了draw_sprite_ext函数来绘制这个精灵,并且绘制了beam_len长度的射线。通过调整精灵的scale,和使用laser_time来计算透明度,我们可以实现一个更为smooth的淡色效果。

请注意,这是一个非常基本的示例。要实现更为复杂的效果,你可能需要创建更多的精灵序列,并且使用更加精确的物理模型来模拟射线的行为。