我正在创建这个2D像素的艺术游戏。当相机跟随玩家(它使用缓动)时,在最后的方法中,位置会得到几个子像素的调整。
如果我有平滑(在我的图形资源上),图形看起来很好(锐利。这是像素艺术),但亚像素运动是抖动/跳跃。
如果我关闭了平滑,亚像素运动是平滑的,但像素艺术图形看起来很模糊。
我使用的是Flash player v21。我已经在Starling和Flash的显示列表中尝试过了。
发布于 2016-08-03 02:33:30
你有一个像素化的对象,它以小于像素大小的增量移动,但是你不想把你的数学宽松限制在整数上,或者更糟糕的是,8的因数等等。我在我的项目中用来解决这个问题的解决方案发布在下面(我上周才开始工作!)
概念
使用浮点数创建由easing控制的驱动程序。
然后允许此驱动程序控制实际显示对象的呈现位置。我们可以使用一个约束来只允许显示对象在您选择的分辨率上渲染。
代码示例
// 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。
在你的例子中,由于“相机”正在跟随玩家(即背景在移动,对吗?)然后,你真的需要将驱动程序应用到后台的所有东西上,但这基本上是相同的想法。
希望这能有所帮助。
发布于 2016-08-19 23:44:10
由于你特别提到了“最终方法”,我认为你的问题来自于宽松方程将你的图形放在分数坐标上,特别是在更接近目标的时候,但你也应该在动画的其余部分注意到这一点。
根据您正在使用的宽松“引擎”,您应该能够设置一个“四舍五入值”标志,因此所有的坐标集将是整数值,而不是小数如果这是不可能的,请在您的显示对象中找到一种方法,以便在x和y值每次发生变化时对它们进行舍入
https://stackoverflow.com/questions/38708558
复制相似问题