我不明白为什么我会有这个问题.首先简单概述一下:下的绘制功能需要绘制一个图像,如果"centerEnabled"为真,图像将从它的中心绘制,如果"翻转"为真,图像将被翻转,问题是它将被正确翻转,但只有在中心被启用的情况下,如果不是,图像的坐标将被搞乱,并走出画布,在那里它看不到.

---- CODE ----

draw()
{
    this.global.ctx.save();
    
    this.global.ctx.translate(this.getX() + this.getWidth()/2, this.getY() + this.getHeight()/2);
    
    if(this.#flipped)
    {
        this.global.ctx.scale(-1, 1);
    }
    else
    {
        this.global.ctx.scale(1, 1);
    }
    
    this.global.ctx.rotate((this.angle * Math.PI) / 180);
    //this.ctx.fillRect(-this.getWidth()/2, -this.getHeight()/2, this.getWidth(), this.getHeight()); //! DRAW HITBOX
    if(this.#centerEnabled)
    {
        this.global.ctx.drawImage(this.#image, -this.getWidth()/2 , -this.getHeight()/2, this.getWidth(), this.getHeight());
    }
    else
    {
        this.global.ctx.drawImage(this.#image, this.getX(), this.getY(), this.getWidth(), this.getHeight());
    }

    this.global.ctx.restore();
}

如果有必要,这些是Contex用来绘制图像以获得图像的真实X、Y、宽度、高度的函数(因为一切都是响应的,但您可以将其视为正常的GET):

-- getX() --

getX()
{
    if(this.#centerEnabled)
    {
        return this.global.getSize(this.x,"vw") - (this.getWidth()/2);
    }
    else{
        return this.global.getSize(this.x,"vw");
    }
}

-- getY() --

getY()
{
    if(this.#centerEnabled)
    {
        return this.global.getSize(this.y,"vh") - (this.getHeight()/2);
    }
    else{
        return this.global.getSize(this.y,"vh");
    }
}

-- getWidth() --

getWidth()
{
    return (((this.global.getSize(this.size,this.#resizeRule) * this.#ratio) / 100.0) * this.#scaleX).toFixed(3);
}

-- getHeight() --

getHeight()
{
    return ((this.global.getSize(this.size,this.#resizeRule) / 100.0) * this.#scaleY).toFixed(3);
}

先谢谢你.

推荐答案

最后,我想出了如何正确地做到这一点,在更新的代码中,我设法翻转了图像,并保持了图像绘制位置的顶点(左上角)

draw()
{
    this.global.ctx.save();
    
    if(this.#centerEnabled) 
    {
        this.global.ctx.translate(this.getX() + (this.getWidth() / 2), this.getY() + (this.getHeight() / 2));
    } 
    else 
    {
        this.global.ctx.translate(this.getX(), this.getY());
    }
    
    if(this.#flipped)
    {
        this.global.ctx.scale(-1, 1);
    }
    else
    {
        this.global.ctx.scale(1, 1);
    }
    
    this.global.ctx.rotate((this.angle * Math.PI) / 180);
    //this.ctx.fillRect(-this.getWidth()/2, -this.getHeight()/2, this.getWidth(), this.getHeight()); //! DRAW HITBOX
    if (this.#centerEnabled) 
    {
        this.global.ctx.drawImage(this.#image, -this.getWidth() / 2, -this.getHeight() / 2, this.getWidth(), this.getHeight());
    } 
    else 
    {
        if(this.#flipped)
        {
            this.global.ctx.drawImage(this.#image, -this.getWidth(), 0, this.getWidth(), this.getHeight()); //? Maintain the vertex of the image to top-left when it's flipped [Matteo]
        }
        else
        {
            this.global.ctx.drawImage(this.#image, 0, 0, this.getWidth(), this.getHeight());
        }
    }

    this.global.ctx.restore();
}

Javascript相关问答推荐

如何编辑代码FlipDown.js倒计时?

如何访问Json返回的ASP.NET Core 6中的导航图像属性

防止用户在selectizeInput中取消 Select 选项

获取Uint8ClampedArray中像素数组的宽度/高度

Reaction Native中的范围滑块

这个值总是返回未定义的-Reaction

如何修复我的数据表,以使stateSave正常工作?

提交链接到AJAX数据结果的表单

使用自动识别发出信号(&Q)

将嵌套数组的元素乘以其深度,输出一个和

使用RxJS from Event和@ViewChild vs KeyUp事件和RxJS主题更改输入字段值

将Auth0用户对象存储在nextjs类型脚本的Reaction上下文中

FireBase FiRestore安全规则-嵌套对象的MapDiff

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?

AG-GRIDreact 显示布尔值而不是复选框

在Press Reaction本机和EXPO av上播放单个文件

ReactJS在类组件中更新上下文

在每次重新加载页面时更改指针光标

将字符串解释为数字;将其重新编码为另一个基数

JavaScript -如何跳过某个字符(S)来打乱字符串中的字符