首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以在不打开图形平滑的情况下进行平滑/亚像素运动?

有没有一种方法可以在不打开图形平滑的情况下进行平滑/亚像素运动?
EN

Stack Overflow用户
提问于 2016-08-02 05:39:44
回答 2查看 82关注 0票数 0

我正在创建这个2D像素的艺术游戏。当相机跟随玩家(它使用缓动)时,在最后的方法中,位置会得到几个子像素的调整。

如果我有平滑(在我的图形资源上),图形看起来很好(锐利。这是像素艺术),但亚像素运动是抖动/跳跃。

如果我关闭了平滑,亚像素运动是平滑的,但像素艺术图形看起来很模糊。

我使用的是Flash player v21。我已经在Starling和Flash的显示列表中尝试过了。

EN

回答 2

Stack Overflow用户

发布于 2016-08-03 02:33:30

你有一个像素化的对象,它以小于像素大小的增量移动,但是你不想把你的数学宽松限制在整数上,或者更糟糕的是,8的因数等等。我在我的项目中用来解决这个问题的解决方案发布在下面(我上周才开始工作!)

概念

使用浮点数创建由easing控制的驱动程序。

然后允许此驱动程序控制实际显示对象的呈现位置。我们可以使用一个约束来只允许显示对象在您选择的分辨率上渲染。

代码示例

代码语言:javascript
复制
// 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.

然后,当您准备好放松驱动程序时:

代码语言:javascript
复制
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。

在你的例子中,由于“相机”正在跟随玩家(即背景在移动,对吗?)然后,你真的需要将驱动程序应用到后台的所有东西上,但这基本上是相同的想法。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2016-08-19 23:44:10

由于你特别提到了“最终方法”,我认为你的问题来自于宽松方程将你的图形放在分数坐标上,特别是在更接近目标的时候,但你也应该在动画的其余部分注意到这一点。

根据您正在使用的宽松“引擎”,您应该能够设置一个“四舍五入值”标志,因此所有的坐标集将是整数值,而不是小数如果这是不可能的,请在您的显示对象中找到一种方法,以便在x和y值每次发生变化时对它们进行舍入

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38708558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档