我正在制作这款2D像素艺术游戏。当相机跟随播放器(它使用缓动)时,在最后进近时,位置会进行几个子像素调整。
如果我打开平滑(在我的图形资源上),图形看起来很好(很清晰。它是像素艺术)但是亚像素运动是生涩/跳跃。
如果我平滑OFF,则子像素运动平滑,但像素艺术图形看起来很模糊。
我正在使用Flash播放器v21。我已经尝试过使用Starling和Flash的显示列表。
答案 0 :(得分:0)
你有一个像素化对象以小于像素大小的增量移动,但你不想将你的数学宽松限制为整数,或者甚至更糟,8或8的因素。我在我的项目中使用的解决方案针对这个问题发布在下面(我上周刚刚开始工作!)
使用浮点数创建一个由缓动控制的驱动程序 然后允许此驱动程序控制实际显示对象的呈现位置。我们可以使用约束来仅允许显示对象以您选择的分辨率进行渲染。
// you'll put these lines or equivalent in the correct spots for your particular needs.
// SCALE_UP will be your resolution control. If your pixels are 4 pixels wide, use 4.
const SCALE_UP: int = 4;
var d:CharacterDriver = new CharacterDriver();
var c:Character = new Character();
c._driver = d; // I've found it useful to be able to reference the driver
d._drives = c; // or the thing the driver drives via the linked object.
// you don't have to do this.
然后当你准备好放松驱动程序时:
function yourEase(c:Character, d:CharacterDriver):void{
c.x = Math.ceil(d.x - Math.ceil(d.x)%SCALE_UP);//this converts a floating point number into a factor of SCALE_UP
c.y = Math.ceil(d.y - Math.ceil(d.y)%SCALE_UP);
现在这将使你的角色一次移动4个像素,但仍然可以体验缓和!
具有模数(%)运算符的位是关键。例如,102-102%4 = 100.103-103%4 = 100.104-104%4 = 104.
如果有人对此感到困惑,请查看102%4的内容:4进入102次25次,余下2次。所以102%4 = 2.然后102 - 2 = 100。
在你的情况下,因为"相机"跟随播放器(即背景正在移动,对吗?)然后你真的需要将驱动程序应用到背景中的所有内容,但它基本上是相同的想法。
希望这有帮助。
答案 1 :(得分:0)
因为您特别提到了#34;最终方法"我认为你的问题来自这样一个事实,即缓和方程将你的图形放在小数坐标处,特别是在靠近目标时,你应该在动画的其余部分注意到它。
取决于缓和"引擎"你正在使用你应该能够设置一个"圆值"标志,因此所有坐标设置将是整数值而不是小数 如果不可能,请在显示对象中找到一种方法,以便在每次更改时对x和y值进行舍入