【发布时间】:2012-07-06 08:05:03
【问题描述】:
我正在制作一个自上而下的射击游戏,它依赖于始终旋转指向鼠标光标的头像。我实现了这样的旋转:
//Rendering.
context.save(); //Save the context state, we're about to change it a lot.
context.translate(position[0] + picture.width/2, position[1] + picture.height/2); //Translate the context to the center of the image.
context.rotate(phi); //Rotate the context by the object's phi.
context.drawImage(picture.image, -picture.width/2, -picture.height/2); //Draw the image at the appropriate position (center of the image = [0, 0]).
context.restore(); //Get the state back.
当phi 为零时,图像以其正常质量呈现,具有锐利的边缘和可检测的像素。但是,当我将phi 设置为非零值时(实际上,当它不是0、Pi/2、Pi、Pi+Pi/2 或2Pi)时,图像会失去它的清晰度,并且单个像素可以再也看不到了,因为它们已经模糊了。
这是一个屏幕截图(很抱歉屏幕截图的质量很差,但我认为差异非常明显):
这有点不可接受。我不能让图像总是模糊不清! 为什么会发生这种情况,我可以解决吗?
【问题讨论】:
-
想想原始像素需要如何与图像的旋转版本对齐..它们与像素网格不匹配 - 那么应该发生什么..?
-
为什么非 HTML5 游戏不会出现这种情况?今天晚些时候我在玩Dragon Fly,旋转小龙没有问题!
-
我相信它是用 Java 编写的,但是是的,谢谢你提醒我,@Daedalus,这在 Flash 游戏中也不会发生。所以我猜它一定是特定于 HTML5 的东西。如果其他游戏可以适合我显示器的像素网格,而且看起来不模糊,那可能是软件问题。
-
您确定它是正在旋转的单个图像吗?一种方法是绘制多张图像并在正确的时间使用它们 - 这样您就可以直接控制任何抗锯齿。
-
在缩放或旋转时减少质量损失的一个选项是使用矢量图形 - 参考这个问题:stackoverflow.com/questions/4340040/…
标签: javascript image canvas browser