2010-04-13 8 views
0

양수선 사이에 고정 된 거리 (1.75 픽셀)의 평행선을 그릴 때 오프셋에 따라 선이 다르게 그려집니다. 아래 그림에는 두 개의 매우 가까운 수직선이 있습니다. 보시다시피, 그들은 매우 다르게 보입니다. 이는 특히 스프라이트에 애니메이션을 적용 할 때 실망 스럽습니다.위치에 따라 그래픽 렌더링이 다름

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

메모를 그 위의 예 선에서 수학의 모든 글로벌 "트윕"그리드의 그래픽. – jedierikb

답변

1

플래시는 내부적으로 트윕을 사용하지만 렌더링 할 때 전체 픽셀로만 렌더링 할 수도 있습니다. .x 위치를 설정하기 전에 int로 캐스팅하는 것 이외에는이 문제를 해결할 방법이 없습니다. 그런 다음 실제 부동 소수점의 위치를 ​​유지하는 번호를 가지고 있고, .x를

편집 설정하기 전에 int로 캐스팅 것 :

 
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); 
} 
+0

의견을 보내 주셔서 감사합니다. 이 문제에 대한 설명을 단순화하는 방법으로 게시물을 편집하고 스프라이트의 x 위치를 제거하도록 권장했습니다. 라인들 사이의 서브 픽셀 공간이 렌더링 될 수있는 때가 있기 때문에, 나의 도전은 그 조건들이 무엇인지 알아내는 것입니다. – jedierikb

+0

아 .. 오해에 대한 저의 실수. 하지만 내가 말했듯이 플래시는 서브 픽셀에서 렌더링 할 수 없습니다. 나는 그것이 둥근 방법을 기억하지 못한다. 그러나 값은 확실히 그려지기 전에 반올림된다. 그래서 그들이 똑같은지 확인하는 유일한 방법은 그리기 전에 int로 캐스팅하는 것입니다. 왜 하위 픽셀을 사용해야하는지 모르겠지만 px1을 int로 캐스트 한 다음 px2를 얻기 위해 1.75를 추가하면 여전히 선들이 서로 1.75만큼 옵셋 될 수 있습니다. 시각적으로 동일하다. 나는 그것을 내 게시물로 편집했습니다. – jonathanasdf

관련 문제