我想帮助我的一个小项目。
背景: 我有一个Sprite派生类的小层次结构(从一个开始的5个级别,这是Flex Builder中的根应用程序类)。宽度和高度属性被覆盖,以便我的类始终记住它的请求大小(不仅仅是围绕内容的边界大小),还有那些属性明确地将scaleX和scaleY设置为1,因此不会涉及任何缩放。存储这些值后,调用draw()方法重绘内容。
图: 绘图非常简单。只有最深的对象(在1索引级别5)才会在this.graphics对象中绘制内容,如下所示:
var gr:Graphics = this.graphics;
gr.clear();
gr.lineStyle(0, this.borderColor, 1, true, LineScaleMode.NONE);
gr.beginFill(0x0000CC);
gr.drawRoundRectComplex(0, 0, this.width, this.height, 10, 10, 0, 0);
gr.endFill();
继续: 还有MouseEvent.MOUSE_WHEEL事件附加到绘制对象的父级。处理程序所做的只是调整绘图对象的大小。
问题: Screenshot
当调整大小时,使用LineScaleMode.NONE设置的细线边界线设置增加厚度(通常甚至> 10 px)+它经常留下自己的痕迹(如上图和蓝色框下方的图片所示(请注意该框本身有一个px黑色边框))。当我将lineStile厚度设置为NaN或alpha设置为0时,该路径不再发生。
我已经回到这个问题并将其放入其他一些东西一个多星期了。
任何想法?
P.S。灰色背景是Flash Player本身的背景,而不是我自己的选择......:D
根据要求,再多一点: 应用程序应该是具有缩放“功能”的日历时间轴(大学课程的项目)。因此,我有这些与调整大小有关的功能:
public function performZoom():void
{
// Calculate new width:
var newDayWidth:Number = view.width / 7 * this.calModel.zoom;
if (newDayWidth < 1)
{
newDayWidth = 1;
}
var newWidth:int = int(newDayWidth * timeline.totalDays);
// Calculate day element Height/Width ratio:
var headerHeight:Number = this.timeline.headerAllDay;
var proportion:Number = 0;
if (this.view.width != 0 && this.view.height != 0)
{
proportion = 1 / (this.view.width / 7) * (this.view.height - this.timeline.headerAllDay);
}
// Calculate new height:
var newHeight:int = int(newDayWidth * proportion + this.timeline.headerAllDay);
// Calculate mouse position scale on X axis:
var xScale:Number = 0;
if (this.timeline.width != 0)
{
xScale = newWidth / this.timeline.width;
}
// Calculate mouse position scale on Y axis:
var yScale:Number = 0;
if (this.timeline.height - this.timeline.headerAllDay != 0)
{
yScale = (newHeight - this.timeline.headerAllDay) / (this.timeline.height - this.timeline.headerAllDay);
}
this.timeline.beginUpdate();
// Resize the timeline
this.timeline.resizeElement(newWidth, newHeight);
this.timeline.endUpdate();
// Move timeline:
this.centerElement(xScale, yScale);
// Reset timeline local mouse position:
this.centerMouse();
}
public function resizeElement(widthValue:Number, heightValue:Number):void
{
var prevWidth:Number = this.myWidth;
var prevHeight:Number = this.myHeight;
if (widthValue != prevWidth || heightValue != prevHeight)
{
super.width = widthValue;
super.height = heightValue;
this.scaleX = 1.0;
this.scaleY = 1.0;
this.myHeight = heightValue;
this.myWidth = widthValue;
if (!this.docking)
{
this.origHeight = heightValue;
this.origWidth = widthValue;
}
this.updateAnchorMargins();
onResizeInternal(prevWidth, prevHeight, widthValue, heightValue);
}
}
是。我知道..很多核心,以及很多属性,但实际上大部分内容都已在最后被禁用,情况如上所述。
这不起作用:
gr.lineStyle(); // Reset line style
答案 0 :(得分:1)
我们能看到你的调整代码吗?
同时尝试清除您的线条样式以及填充:
gr.lineStyle(0, this.borderColor, 1, true, LineScaleMode.NONE);
gr.beginFill(0x0000CC);
gr.drawRoundRectComplex(0, 0, this.width, this.height, 10, 10, 0, 0);
gr.endFill();
gr.lineStyle();//<---- add this line
答案 1 :(得分:0)
我不知道它是flash bug还是它是什么,但我终于找到了解决方案。
就我的情况而言,简而言之,你就是这样:
this.width = this.stage.stageWidth / 7 * 365;
当我切换到最大化窗口时,this.width获得值86k +。当我添加这段代码来绘制水平线时,它自行修复:
var recWidth:Number = this.width;
var i:int;
var newEnd:Number = 0;
for (i = 1; newEnd < recWidth; i++)
{
newEnd = 100 * i;
if (newEnd > recWidth)
{
newEnd = recWidth;
}
gr.lineTo(newEnd, 0);
}
我不知道发生了什么......这很不方便......