ActionScript에서 동적으로 클래스를 만듭니다
-
16-09-2019 - |
문제
먼저 문제를 제시하겠습니다. 프로젝트에서 사용했던 모든 이미지를 내부적으로 내놓지 않고로드해야합니다. 이미지는 스킨 또는 나무의 아이템에 대한 아이콘으로 존재합니다. 나는 상징적 수업을 발견했습니다 여기나는 그것을 수정하고 나무에 사용할 수 있었지만 문제는 동일한 구성 요소에 상징성을 사용할 수 없다는 것입니다 (버튼과 같은 Upskin Downskin과 같은 2 개의 다른 스킨을 설정할 수 없다는 것입니다. 상징적 인 해결 방법을 생각할 수 없었습니다. 임베드를 시뮬레이션하고 동적으로 클래스를 생성하고 런타임에 클래스를 반환 할 수 있습니까?
해결책
이러한 것들을 달성하는 가장 간단한 것은 자산이 포함 된 하나/다중 SWF를 만들고로드 한 다음 그곳에서 클래스를 꺼내는 것입니다 (즉,로드 된 SWFS 응용 프로그램 도메인) ...
이에 대한 여러 솔루션이 있습니다.
- 하드 코어 버전은 해당 이미지를로드하는 것입니다
ByteArray
s는 urlloader를 사용한 다음 새로 생성합니다ByteArray
, 그것은 내장 된 자산과 클래스와 연결하는 데 필요한 지침을 포함하는 SWF 파일입니다 ... Spark 's를보고 싶을 수도 있습니다. Swfassist ... - 조금 더 단순하고 성능이 (한 번만 수행하므로) 서버에서 그렇게하는 것입니다 ... 여기서는 할 수 있습니다.
도움이되기를 바랍니다
편집하다: 두 번째 솔루션은 서버에서 자산을 만들거나 적절한 도구를 사용하거나 도구를 직접 코딩하는 것입니다. ... 아이디어는 단순히 웹 서버에 연결 한 다음 일부 Actionscript를 컴파일하도록하는 것입니다. 이는 포함시켜 다음과 같이 하나의 ActionScript 파일을 생성합니다.
package {
import flash.display.Sprite;
import flash.utils.describeType;
public class Assets extends Sprite {
[Embed(source='asset_1_Location')]
public static var asset_1:Class;
[Embed(source='asset_2_Location')]
public static var asset_2:Class;
...
[Embed(source='asset_n_Location')]
public static var asset_n:Class;
public function Assets() { }
public static function getAll():Object {
var ret:Object = { };
for each (var x:XML in describeType(Assets).variable.(@type=="Class")) {
var name:String = x.@name;
ret[name] = Assets[name];
}
return ret;
}
}
}
그런 다음 Flex 컴파일러가 컴파일되도록하십시오 ...로드하면 LoaderInfo :: ApplicationDomain.getDefinition ( "Assets")으로 데이터를 추출하십시오. GetAll ()은 필요한 모든 클래스와 함께 키 값 맵을 제공합니다 ...
다른 도구를 사용하면 다르게 작동하지만 이것이 어떻게 작동 해야하는지 명확히하기를 바랍니다.
서버에는 서비스가 필요합니다.이 자산 SWF를 구축하고 캐시 할 수있는 서비스가 필요합니다. 예를 들어 필요한 JSON 배열과 함께 게시물 요청을 보냅니다. 당신은 SWF를 되돌려 ... 서버는 물론 적절한 캐싱을 수행해야합니다 ...
희망, 이제 도움이됩니다 ... :)
인사
back2dos
다른 팁
이것 내가 찾고 있던 것이 었습니다 ... 불행히도 저자는 버튼 스킨에 사용할 수 없다고 주장합니다.