Рендеринг графики различается в зависимости от позиции - PullRequest
0 голосов
/ 13 апреля 2010

При рисовании параллельных вертикальных линий с фиксированным расстоянием между ними (1,75 пикселя) с нецелым смещением по x-значению по обеим линиям линии по-разному отображаются в зависимости от смещения. На рисунке ниже две пары очень близко друг к другу вертикальных линий. Как видите, они выглядят совсем по-другому. Это расстраивает, особенно при анимации спрайта.

альтернативный текст 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-позиции спрайта.

1 Ответ

1 голос
/ 13 апреля 2010

, хотя во флеш-памяти используются твипы, при рендеринге она может отображать только полные пиксели. Нет способа (который я знаю) исправить это, кроме приведения к int перед установкой позиции .x. Затем вам нужно будет иметь Number, который сохраняет фактическую позицию с плавающей запятой, и приводить его к 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 );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...