2015-01-11 2 views
0

안드로이드 용 AS3 AIR 응용 프로그램에서 사용자는 도형 및 그래픽 속성을 사용하여 일부 그리기를 개발할 수 있습니다. 사용자가 도면을 File.applicationStorageDirectory에 저장 한 다음 그리기 속성을 그대로 유지 한 채 도면을 다시로드해야합니다.MovieClip Air 저장 /로드 안드로이드

이 서랍 대표 클래스 : 주요으로, 외부

public class Background extends Sprite { 
    public var shape:Shape; 
    public function Background(){ 
     this.shape = new Shape(); 
     shape.graphics.beginFill(0x000000); 
     shape.graphics.drawRect(0, 0, 400, 400); 
     shape.graphics.endFill(); 
     this.addChild(shape); 
    } 
} 

을 : public var bg:Background;

그래서, 외부에서 일부 SWF를로드 할 때, 나는 저장할 수 있습니다/부하 다음 코드에서 봐 그것없이 아무 문제없이, 나는 ByteArrays를 로더 클래스에 가지고 있기 때문에.

하지만 런타임에 빌드 된 DisplayObject를 어떻게 저장할 수 있습니까? 이 같은 뭔가 : 나는의 writeObject() 메소드를 사용하여 시도

bg = new Background(); 

try{ 
      bytes = new ByteArray(); 
      file = File.applicationStorageDirectory.resolvePath("test/some.swf"); 
      fileStream = new FileStream(); 
      fileStream.open(file, FileMode.WRITE); 
      fileStream.writeBytes(bytes) // -----HERE, I DO NOT HAVE bg bytes, 
      fileStream.close(); 

     } catch (e:IOError){ 
      fileStream.close(); 
     } 

, 그것은 일반적으로 저장하지만 내가 그것을로드하려고하면 예외가 발생합니다 : 알 수없는 파일 형식을.

어떻게하면됩니까? bg 바이트를 추출하거나 저장하려면 어떻게해야합니까? 분명히, 나는 모든 속성을 손상시키지 않고 다시 검색하고 싶습니다.

+0

중복 가능성을 [플래시 : 모양에서 데이터를 읽는 방법/그래픽 개체] (http://stackoverflow.com/questions/1836758/flash-how-to-read-data-from-shape-graphics-object) – null

+1

사용자가 취한 동작을 저장하려고합니다. 그림을 저장하고 해석하지 마십시오. 따라서 사용자가 정사각형을 그릴 때 정보를 저장하십시오. 이 기능을 사용하면 내역이있는 앱을 열거 나 그리기 작업을 다시 만들 수 있습니다. – moot

답변

1

DisplayObjects의 직렬화는 오랫동안 불가능했으며 자동으로 실패했습니다.

사용자가 수행하는 작업을 기록하여 직렬화를 직접 수행 한 다음 결과 대신 해당 레코드를 저장할 수 있습니다. 또한 http://www.bytearray.org/?p=4893

,이 질문에 대해 살펴 걸릴 : 이,

을 (. 명령 패턴은 마음에 온다) 또는 How to read data from shape/graphics object

+0

시간 내 주셔서 감사합니다. 사용자 작업을 기록한 다음 해당 작업을 기반으로 다시 그리기해야한다는 의미입니까? –

+0

그렇습니다. 이러한 작업을 직렬화하는 방법을 정의 할 수 있으므로 가능한 해결책 일 수 있습니다. 하지만 readGraphicsData() 옵션을 사용하면 연결된 다른 질문에서 본 것처럼) 데이터를 읽고 직렬화 할 수도 있습니다. 내장 함수를 사용하면 작업량은 줄어들지 만 명령 패턴 (작업 기록 및 실행)은 유연성을 제공합니다. 예 : 모든 작업 목록에서 마지막 작업을 제거하기 만하면 "마지막 작업 실행 취소"기능을 쉽게 만들 수 있습니다. 선택은 응용 프로그램에서 무엇을하고 싶은지에 따라 다릅니다. – null

+0

알겠습니다. 확실히 Command pattern을 사용하여 그것을 할 것입니다. 한 가지 더 질문합니다. 어떻게 행동 벡터를 연재 할 수 있습니까? 나도 몰라요. –