大家好!我刚刚开始使用Gamemaker(尝试用它来制作我最新的游戏而不是Unreal),并且正在制作一个使用像素艺术的游戏。draw_rectangle函数在添加两个边缘的额外1像素线时出现问题,并且没有内置的方法来旋转绘制的矩形。

我正在绘制工具提示,通过绘制一系列矩形和文本来实现,这是一个解决方案,允许旋转。虽然这不是最干净的方法,但我想分享一下。

编辑:我调整了角度并意识到RotatePoint函数存在一个微小的错误,我在代码块中进行了调整var _angle_radians = _angle*pi/180; --> var _angle_radians = (_angle + 180)*pi/180;

//绘制一个矩形,具有颜色、透明度和角度的原理
function DrawRectangle(_origin_x, _origin_y, _x1, _y1, _x2, _y2, _color = c_white, _alpha = 1, _angle = 0)
{
    var _previous_color = draw_get_colour();
    var _previous_alpha = draw_get_alpha();
    draw_set_colour(_color);
    draw_set_alpha(_alpha);

    draw_primitive_begin(pr_trianglestrip);
    draw_vertex(RotatePoint(_origin_x, _origin_y, _x1, _y1, _angle)[0], RotatePoint(_origin_x, _origin_y, _x1, _y1, _angle)[1]);
    draw_vertex(RotatePoint(_origin_x, _origin_y, _x1, _y2, _angle)[0], RotatePoint(_origin_x, _origin_y, _x1, _y2, _angle)[1]);
    draw_vertex(RotatePoint(_origin_x, _origin_y, _x2, _y1, _angle)[0], RotatePoint(_origin_x, _origin_y, _x2, _y1, _angle)[1]);
    draw_vertex(RotatePoint(_origin_x, _origin_y, _x2, _y2, _angle)[0], RotatePoint(_origin_x, _origin_y, _x2, _y2, _angle)[1]);
    draw_primitive_end();

    draw_set_colour(_previous_color);
    draw_set_alpha(_previous_alpha);
}

//围绕一个原点旋转一个点,根据给定的角度(度)
function RotatePoint(_x_origin, _y_origin, _x_point, _y_point, _angle)
{
    var _angle_radians = (_angle + 180)*pi/180;
    var _base_x = _x_origin - _x_point;
    var _base_y = _y_origin - _y_point;
    var _normal_x = _base_x*cos(_angle_radians) - _base_y*sin(_angle_radians);
    var _normal_y = _base_x*sin(_angle_radians) + _base_y*cos(_angle_radians);
    return [_x_origin + _normal_x, _y_origin + _normal_y];
}