Javascript:测量图像效果
我正在用melonJS做一个2d游戏 在我的游戏中,我有一个绕轴旋转的箭头。此箭头是png图像。当我按住鼠标左键时,箭头需要从黄色填充到红色,从底部填充到顶部。下面是一个例子: 初始箭头为浅红色,如示例图像顶部所示。当我一直点击按钮时,箭头颜色应该从底部变为顶部,以一条白线作为当前位置Javascript:测量图像效果,javascript,canvas,Javascript,Canvas,我正在用melonJS做一个2d游戏 在我的游戏中,我有一个绕轴旋转的箭头。此箭头是png图像。当我按住鼠标左键时,箭头需要从黄色填充到红色,从底部填充到顶部。下面是一个例子: 初始箭头为浅红色,如示例图像顶部所示。当我一直点击按钮时,箭头颜色应该从底部变为顶部,以一条白线作为当前位置 如何使用javascript实现这一点?melonJS中有什么东西可以处理这种把戏吗?您可以将两个PNG文件分层,一个带有箭头,一个带有条纹,并控制位于箭头顶部的白色条纹的位置。默认情况下,Canvas应该非常
如何使用javascript实现这一点?melonJS中有什么东西可以处理这种把戏吗?您可以将两个PNG文件分层,一个带有箭头,一个带有条纹,并控制位于箭头顶部的白色条纹的位置。默认情况下,Canvas应该非常容易地启用该功能,如果您使用的是库,则更是如此 您可以将两个PNG文件分层,一个带有箭头,一个带有条纹,并控制位于箭头顶部的白色条纹的位置。默认情况下,Canvas应该非常容易地启用该功能,如果您使用的是库,则更是如此 既然你的问题是基于文本而不是基于代码的,我也会这么做 下面是如何绘制旋转的渐变箭头
- 使用
清除画布context.clearRect
- 旋转:平移到要围绕其旋转的所需中心轴坐标。然后旋转到你想要的角度。转换(
&context.translate
)实际上会旋转画布本身。这样,所有新图形都将被平移(移动)和旋转。注意:现有像素将不受影响context.rotate
- 绘制箭头:使用路径命令绘制箭头(
,beginPath
,moveTo
,…针对每个箭头)。因为已经完成了变换(平移和旋转),所以不需要尝试旋转箭头图形lineTo
- 箭头渐变填充:创建延伸到箭头图形的线性渐变(
)。设置颜色停止(context.createLinearGradient
)沿箭头创建所需的黄色和红色渐变。使用渐变作为context.addColorstop
并用上下文.fillStyle
填充箭头路径上下文.fill
- 为白色指示线使用渐变您也可以使用渐变来显示白色指示条。要做到这一点,画你的箭头,然后用另一个在所有地方都是透明的梯度透支,除了你想要的指示器百分比,它将是白色的
var g=ctx.createLinearGradient(0,170,0,0); g.addColorStop(pct-0.01,'transparent'); g.addColorStop(pct-0.01,'white'); g.addColorStop(pct+0.01,'white'); g.addColorStop(pct+0.01,'transparent'); ctx.fillStyle=g; ctx.fill();
- 始终保持清洁撤消转换。您可以通过以下两种方法撤消转换:(1)以相反顺序重新发出转换命令并使用负参数;(2)通过使用
重置转换矩阵,将每个转换重置为默认值context.setTransform(1,0,0,1,0,0)
将代码放入
requestAnimationFrame
动画循环中,并更改角度和/或渐变以满足设计需要 既然你的问题是基于文本而不是基于代码的,我也会这么做
下面是如何绘制旋转的渐变箭头
- 使用
清除画布context.clearRect
- 旋转:平移到要围绕其旋转的所需中心轴坐标。然后旋转到你想要的角度。转换(
&context.translate
)实际上会旋转画布本身。这样,所有新图形都将被平移(移动)和旋转。注意:现有像素将不受影响context.rotate
- 绘制箭头:使用路径命令绘制箭头(
,beginPath
,moveTo
,…针对每个箭头)。因为已经完成了变换(平移和旋转),所以不需要尝试旋转箭头图形lineTo
- 箭头渐变填充:创建延伸到箭头图形的线性渐变(
)。设置颜色停止(context.createLinearGradient
)沿箭头创建所需的黄色和红色渐变。使用渐变作为context.addColorstop
并用上下文.fillStyle
填充箭头路径上下文.fill
- 为白色指示线使用渐变您也可以使用渐变来显示白色指示条。要做到这一点,画你的箭头,然后用另一个在所有地方都是透明的梯度透支,除了你想要的指示器百分比,它将是白色的
var g=ctx.createLinearGradient(0,170,0,0); g.addColorStop(pct-0.01,'transparent'); g.addColorStop(pct-0.01,'white'); g.addColorStop(pct+0.01,'white'); g.addColorStop(pct+0.01,'transparent'); ctx.fillStyle=g; ctx.fill();
- 始终保持清洁撤消转换。您可以通过以下两种方法撤消转换:(1)以相反顺序重新发出转换命令并使用负参数;(2)通过使用
重置转换矩阵,将每个转换重置为默认值context.setTransform(1,0,0,1,0,0)
将代码放入
requestAnimationFrame
动画循环中,并更改角度和/或渐变以满足设计需要 只是关于重置变换的一个注意事项,在处理旋转时,我认为人们应该更喜欢setTransform方式而不是负变换,因为舍入问题。@kaido。是的,假设新的转换没有进行任何转换,那么上下文。setTransformation(1,0,0,1,0,0,0)
更好。只是关于重置转换的注意事项,在处理旋转时,我认为人们应该更喜欢setTransform而不是负转换,因为舍入问题。@kaido。是的,假设新的transforma没有进行任何转换