as3 - 水平翻转时,movieclip会闪烁吗?

时间:2015-12-25 12:06:42

标签: actionscript-3

当我移动光标时,播放器按预期从左向右翻转。但是,当我将光标保持在屏幕中间时(不是移动光标,而是使用“WASD”键),然后让我的播放器移向光标并走过它。然后玩家将比例改为水平。然而,就在它改变比例之前,玩家内部的孩子(玩家的手臂,炮塔)在改变水平比例之前会在缩放时闪烁。

这是我的代码位于播放器的容器内,它是“PageOne”类。

if (mouseX > player.x)
        {

            player.playerStand.scaleX = 1;
            player.turret.scaleY = 1;
            player.armBottom.scaleY = 1;
            player.armTop.scaleY = 1;
            crosshair.x = mouseX;

        }
        else if (mouseX < player.x)
        {

            player.playerStand.scaleX = -1;
            player.turret.scaleY = -1;
            player.armBottom.scaleY = -1;
            player.armTop.scaleY = -1;
            crosshair.x = mouseX;
        }

所以,我试图这样做,这样玩家的孩子在水平翻转之前不会闪烁,而是立即改变水平形状。具有ScaleX的动画片段不闪烁,但使用scaleY的孩子有这个闪烁的问题。通过阅读可能有点难以理解,所以我在下面添加了一个文件。

以下是文件:https://www.dropbox.com/s/2lf17oj29iuk761/Subject%20Unstable.zip?dl=0

1 个答案:

答案 0 :(得分:0)

闪烁不是由Player属性引起的。它是由scaleY类内的旋转条件引起的。请按照以下步骤操作:

首先删除pageOne类上的private function onEnterFrame(event: Event): void { crosshair.x += (mouseX - crosshair.x) / 5; crosshair.y += (mouseY - crosshair.y) / 5; player.scaleX = (mouseX > player.x) ? 1 : -1; } 属性:

Player

接下来,您需要在var angle = Math.atan2(dy, dx) / Math.PI * 180; if(armBottom.parent.scaleX < 0) angle = 180 - angle; 类上修复炮塔的旋转角度:

if (armBottom.currentFrame != 3)
{
    armBottom.rotation = angle;
}

if (armTop.currentFrame != 3)
{
    armTop.rotation = angle;
}

turret.rotation = angle;

接下来删除所有旋转条件,只留下元素旋转:

if(armBottom.parent.scaleX < 0) angle = 180 - angle;

// Limit the rotation between -30º and 30
// If you want other values change this part.
if(armBottom.parent.scaleX > 0)
{

    if(angle >= -180 && angle < -30) angle = -30;
    if(angle > 30 && angle <= 180 ) angle = 30;

}
else
{

    if(angle < 330 && angle >= 180) angle = 330;
    if(angle > 30 && angle < 180) angle = 30;

}    

if (armBottom.currentFrame != 3)
{
    armBottom.rotation = angle;
    armTop.rotation = angle;
}               

turret.rotation = angle;

你会注意到没有产生闪烁,但现在不会限制手臂的旋转。

你必须检查角度值而不是检查元素的旋转,它会更容易和更干净:

        double x = Double.parseDouble(t1.getText());
        double y = Double.parseDouble(t2.getText());
        double z = Double.parseDouble(t3.getText());
        double w = (1 + (z / (12 * 100)));
        double power = y * 12;
        double m = Math.pow(w, power);
        double fin = x * m;
        BigDecimal bd = BigDecimal.valueOf(fin);
        t4.setText(new DecimalFormat(",###.##").format(bd));