2009-06-19 5 views
0

getCharBoundaries에서 이상한 문제가 발생하여 함수에서 반환 된 좌표가 어떤 좌표 공간인지 알 수 없었습니다. 무엇을 시도했는지 기대했다. 그래서 새 프로젝트를 만들고 간단한 코드를 추가하여 텍스트 필드의 마지막 charater를 강조 표시했습니다. 갑자기 정상적으로 작동했습니다. 그런 다음 문제가 발생한 TextField를 새 프로젝트에 복사하려고했습니다. 이제 x 축에 같은 별난 오프셋이 50 픽셀로 나타납니다. 그 밖의 모든 것이 자리를 잡았습니다. 두 개의 TextField를 비교하는 일부 headscracting을 수행 한 후에는 속성이나 변형의 차이를 볼 수 없습니다.getCharBoundaries의 수수께끼 좌표 오프셋

그래서 누군가가 getCharBoundaries에 의해 반환 된 좌표에 어떤 영향을 미칠지 궁금합니다.

Flash CS4를 사용하고 있습니다.

답변

2

나는 정확히 똑같은 문제를 겪었고 내 발견이 무엇인지 제안함으로써 도움을 줄 것이라고 생각했습니다. 이 스레드의 도움으로 필자가 사용하고있는 텍스트 필드에 대해 '기본값'이 아닌 모든 것을 찾으려고했습니다. 나는 TextFormatAlign (또는 IDE에서 '정렬')과 TextFieldAutoSize 속성을 'CENTER'가 아닌 'LEFT'로 바꿨을 때 문제가 해결된다는 것을 알았습니다.

아마도 게임에서 약간 늦었 겠지만, 같은 문제를 겪고있는 사람이라면 누구에게나 알만한 가치가 있습니다. 이것은 내가 알맞은 깃발을 올린 유일한 실이었다.

+0

그 소리가 답이 될 수 있습니다. 나는이 질문에 의해 누군가가 올 경우에 대비하여 대답을 줄 것이다. –

0

나 (TM) (플렉스 빌더 AS3 프로젝트)에 대한 작품 :

[Embed(systemFont="Segoe UI", fontWeight="bold", fontName="emb", 
    mimeType="application/x-font")] 
private var EmbeddedFont:Class; 

public function ScratchAs3() 
{ 
    stage.scaleMode = 'noScale'; 
    stage.align = 'tl'; 

    var m:Matrix = new Matrix(.8, .1, -.1, 1.1, 26, 78); 

    var t:TextField = new TextField(); 
    t.autoSize = 'left'; 
    t.wordWrap = false; 
    t.embedFonts = true; 
    t.defaultTextFormat = new TextFormat("emb", 100, 0, true); 
    t.transform.matrix = m; 
    t.text = "TEST STRING."; 
    addChild(t); 

    var r:Rectangle = t.getCharBoundaries(8); 
    var tl:Point = m.transformPoint(r.topLeft); 
    var tr:Point = m.transformPoint(new Point(r.right, r.top)); 
    var bl:Point = m.transformPoint(new Point(r.left, r.bottom)); 
    var br:Point = m.transformPoint(r.bottomRight); 
    graphics.beginFill(0xFF, .6); 
    graphics.moveTo(tl.x, tl.y); 
    graphics.lineTo(tr.x, tr.y); 
    graphics.lineTo(br.x, br.y); 
    graphics.lineTo(bl.x, bl.y); 
    graphics.lineTo(tl.x, tl.y); 
} 

그대로 귀하의 질문에 대답하려면, 그렇지는 부모의는 텍스트 필드의 좌표계에서 좌표를 반환하고, 그것은으로 DisplayObject에 의해 영향을 받는다 .taleform.matrix는 .x, .y, .scaleX, .scaleY, .width, .height 및 .rotation 속성을 지원합니다.

+0

내가있어이 코드를 시도 새로운 TextField로 작업하는 것, 나는 반환 된 x 좌표에 어떤 영향을 미칠 수 있는지 알고 싶습니다. 스케일링을 이미 확인했으며 좌표에 영향을 미치지 만 여기에는 원인이 없습니다. –

2

글쎄, getCharBoundaries는 텍스트 필드 좌표계에서 경계를 반환합니다. 원점은 텍스트 필드의 꼭대기 구석입니다.
getCharBoundaries는 스크롤링을 고려하지 않습니다. 부모 (텍스트 영역)에 스크롤 막대가 있는지 확인하고 이동하려는 경우 스크롤 막대가 있는지 확인해야합니다. 한 가지 빠른 방법은 localtoglobal과 globaltolocal을 사용하는 것입니다. 첫 번째 텍스트 필드를 사용하여 텍스트 필드 좌표계에서 응용 프로그램 좌표계로 변환 한 다음 두 번째 문자를 사용하여 응용 프로그램 좌표계에서 텍스트 영역 인 텍스트 필드의 부모 좌표계로 변환합니다. 나는 char 경계를 얻기 위해 내 방법을 잘 조정하고 있습니다. 오늘 내 블로그에 게시 할 것입니다. http://flexbuzz.blogspot.com/

+0

좋은 제안 이었지만 문제가 아니 었습니다. 하지만 필자가 쓴 것처럼 TextField의 속성이었습니다. 결코 알아 내지 않았다. –

0

새로운 TextField를 추가하는 것은 간단했지만 모든 속성을 망쳤습니다.

0

대부분의 경우 첫 번째 대답은 정확하다. 그러나 필드가 다른 무비 클립에 적용되면 여전히 잘못된 y 좌표를 반환 할 수 있습니다. 내가 모르는 뭔가가있어 만약 내가 사과 그래서 난 내 프로젝트에 포함되는 코드에서이 예제를 적응 나는이 코드를 테스트하지 않았다

//if this doesn't work: 

myTextFormat = new TextFormat(); 
myTextFormat.align = TextFormatAlign.LEFT; 
myFieldsParent.myField.autoSize = TextFieldAutoSize.LEFT; 
myFieldsParent.myField.setTextFormat(myTextFormat); 



//try this: 
var x = myFieldsParent.myField.getCharBoundaries(o).x; 
var y = myFieldsParent.myField.getCharBoundaries(o).y; 

var myPoint:Point = new Point(myField.getCharBoundaries(o).x,myField.getCharBoundaries(o).y); 

var pt:Point = new Point(myFieldsParent.myField.getCharBoundaries(o).x, myFieldsParent.myField.getCharBoundaries(o).y); 
pt = myFieldsParent.myField.localToGlobal(pt); 

//pt is the variable containing the coordinates of the char in the stage's coordinate space. You may still need to offset it with a fixed value but it should be constant. 

...