当绘制两条线之间具有固定距离的平行垂直线(1.75像素),并且两条线都具有非整数x值偏移时,将根据偏移量不同地绘制线条。下图是两对非常靠近的垂直线。如你所见,它们看起来非常不同。这很令人沮丧,尤其是在为精灵设置动画时。
alt text http://img94.imageshack.us/img94/8606/lines2.png
任何想法如何确保精灵与非整数位置的图形在视觉上显示相同?
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
public class tmpa extends Sprite
{
private var _sp1:Sprite;
private var _sp2:Sprite;
private var _num:Number;
public function tmpa( ):void
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
_sp1 = new Sprite( );
drawButt( _sp1, 0 );
_sp1.x = 100;
_sp1.y = 100;
_num = 0;
_sp2 = new Sprite( );
drawButt( _sp2, _num );
_sp2.x = 100;
_sp2.y = 200;
addChild( _sp1 );
addChild( _sp2 );
addEventListener( Event.ENTER_FRAME, efCb, false, 0, true );
}
private function efCb( evt:Event ):void
{ _num += .1;
if (_num > 400)
{ _num = 0;
}
drawButt( _sp2, _num );
}
private function drawButt( sp:Sprite, offset:Number ):void
{
var px1:Number = 1 + offset;
var px2:Number = 2.75 + offset;
sp.graphics.clear( );
sp.graphics.lineStyle( 1, 0, 1, true );
sp.graphics.moveTo( px1, 1 );
sp.graphics.lineTo( px1, 100 );
sp.graphics.lineStyle( 1, 0, 1, true );
sp.graphics.moveTo( px2, 1 );
sp.graphics.lineTo( px2, 100 );
}
}
}
从原始帖子编辑,认为问题与精灵的x位置有关。
答案 0 :(得分:1)
虽然flash内部使用twips,但渲染时仍然只能渲染为全像素。除了在设置.x位置之前转换为int之外,没有办法(我知道)解决这个问题。然后,您必须有一个保持实际浮点位置的数字,并在设置之前将其转换为int .x
编辑:
private function drawButt( sp:Sprite, offset:Number ):void { var px1:int = 1 + offset; var px2:Number = px1 + 1.75; sp.graphics.clear( ); sp.graphics.lineStyle( 1, 0, 1, true ); sp.graphics.moveTo( px1, 1 ); sp.graphics.lineTo( px1, 100 ); sp.graphics.lineStyle( 1, 0, 1, true ); sp.graphics.moveTo( px2, 1 ); sp.graphics.lineTo( px2, 100 ); }