플래시 (AS3)의 무대에서 모두 준비된 텍스트 필드를 확장하는 방법은 무엇입니까?
-
06-07-2019 - |
문제
나는 플래시 (AS3)의 무대에서 모두 준비된 텍스트 필드를 확장 할 수있는 방법을 찾고 있습니다.
public class ChildTextField extends TextField
{
//code for childTextField comes here
}
무대에 인스턴스 이름 'thetextfield'가있는 텍스트 필드를 배치했습니다. 이제 Flash이 텍스트 필드가 Childtextfield 유형이라고 말하고 싶습니다. 그래서 내 문서 클래스에서 나는 그 텍스트 필드를 자식 텍스트 필드라고 선언합니다.
public class DocumentClass extends Sprite()
{
public var thetextfield : ChildTextField;
}
이것은 유형 강요 실패 오류를 던진다. 라이브러리 기호로 할 수있는 것처럼 플래시 IDE의 텍스트 필드에 사용되는 클래스를 변경할 수 있습니까?
해결책
두려워하지 마십시오. 확장 된 텍스트 필드 클래스를 추가하려면 ActionScript를 사용해야합니다.
편집 : 해킹 방법이 있습니다. 원천: http://board.flashkit.com/board/archive/index.php/t-738887.html
사실, 나는이 정확한 문제에 대해 전에 다가옵니다. 제 경우에는 다른 다른 비 코더 아티스트가 사용할 다른 행동이있는 텍스트 필드를 만들려고했습니다. 모든 AS3이지만 치명적인 결함이 있었으며 현재 솔루션 인 AS3 및 JSFL의 조합 인 원래 솔루션을 알려 드리겠습니다.
All AS3 솔루션은 두 가지를 제외하고는 훌륭합니다. 첫째, 빌드 타임이 아닌 런타임에 발생합니다. 즉, 영화가 올바르게 초기화되지 않은 작지만 실제 시간이 있다는 것을 의미합니다. 둘째, 영화에 여러 프레임이 있으면 잘 재생되지 않습니다. 기본 아이디어는 변경하려는 텍스트 필드를 감지하고 교체 할 물건을 구축 한 다음 무대에서 교체하는 것입니다. 텍스트 필드를 확장하거나 텍스트 필드가 포함 된 클래스를 만들고 인터페이스를 처리하여이를 수행 할 수 있습니다. 당신이 처음으로하고 있다고 가정 해 봅시다. 당신이 관심있는 모든 필드를 복사하는 SmartTextField에 생성자를 추가하십시오.
public function SmartTextField(TextField tf)
{
this.text = tf.text; //continue with copy of anything relevant.
}
메인 영화에는 교체하려는 텍스트 필드를 감지하고 대체하는 코드가 있습니다.
var toreplace:Array = findTextFields();
var tf:TextField;
var stf:SmartTextField;
var where:int;
for (int i = 0; i < toreplace.length;i++)
{ tf = TextField(toreplace[i]);
stf = new SmartTextField(tf);
where = getChildIndex(tf);
addChildAt(stf,where);
removeChild(tf);
}
위의 점을 제외하고는 잘 작동합니다.
JSFL 솔루션은 자세히 살펴보기에는 너무 복잡하지만 기본 사항은 다음과 같습니다. 원하는 새로운 동작으로 텍스트 필드를 감싸는 AS3 클래스가 있습니다. 선택한 항목을 반복하는 JSFL 스크립트를 작성하고 텍스트 필드 인 경우 새 래퍼 클래스의베이스 클래스가있는 기호로 변환합니다. 여기에는 저자 시대에 발생하는 장점이 있으며 위치, 인스 캐나 이름 및 기타 물건과 같은 것들이 자동으로 보존됩니다. JSFL이 일할 수있는 작은 성가신 단점이 많다는 단점이 있습니다.
편집 : 물론, 이것이 단일 영화에만 해당되는 경우 JSFL 변환기 스크립트를 포기하고 손으로 할 수 있습니다. 기호 -> 래퍼베이스 클래스로 변환합니다.