当我移动光标时,播放器按预期从左向右翻转。但是,当我将光标保持在屏幕中间时(不是移动光标,而是使用“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
答案 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));