문제

동일한 표시 개체를 여러 번 볼 수 있습니까?(예:분할 화면을 사용하는 동일 컴퓨터 멀티 플레이어 게임)

작동하지 않은 샘플 코드는 다음과 같습니다.

    var content: Sprite = new Sprite();
    var v1: Sprite = new Sprite();
    var v2: Sprite = new Sprite();

    with(content.graphics) {
        lineStyle(2, 0xff0000);
        drawCircle(100, 100, 80);

        lineStyle(5, 0x009999);
        drawRect(50, 80, 200, 30);
    }

    v1.addChild(content);
    v1.x = 0;
    v1.y = 0;
    v1.scrollRect = new Rectangle(0, 0, 100, 100);
    addChild(v1);

    v2.addChild(content);
    v2.x = 100;
    v2.y = 0;
    v2.scrollRect = new Rectangle(0, 0, 100, 100);
    addChild(v2);

나는 이것이 두 개의 뷰포트를 만들 것이라고 생각했습니다(v1 그리고 v2) 동일한 객체(content).하지만 DisplayObjectContaner/addChild 메서드 문서를 확인해보니 다음과 같이 나와 있습니다.

"다른 표시 개체 컨테이너가 이미 상위 개체로 있는 하위 개체를 추가하면 해당 개체는 다른 표시 개체 컨테이너의 하위 목록에서 제거됩니다."

이에 대한 해결책이 있습니까?


얻은 결과

Obtained result

예상 결과(시뮬레이션)

예상 결과(시뮬레이션) http://img337.imageshack.us/img337/7914/222mq4.png


Antti가 제안한 대로 비트맵으로 렌더링하는 것은 좋은 생각이지만 렌더링된 스프라이트는 마우스 이벤트를 포착할 수 없습니다.원래 스프라이트에 대한 클릭을 트리거하기 위해 비트맵에서 마우스 클릭을 리디렉션하는 방법이 있습니까?

도움이 되었습니까?

해결책

이 작업을 수행하는 가장 쉬운 방법은 원래 디스플레이 객체의 내용으로 업데이트되는 비트 맵을 다음과 같은 것입니다.

var bitmap:Bitmap = new Bitmap(new BitmapData(1,1));
addChild(bitmap);

addEventListener(Event.ENTER_FRAME,enterFrameHandler);

function enterFrameHandler(event:Event):void {
    bitmap.bitmapData.dispose();
    bitmap.bitmapData = new BitmapData(displayObject.width, displayObject.height, true, 0x00000000);
    bitmap.bitmapData.draw(displayObject);
}

다른 팁

한 가지 방법은 게임 로직 등을 제어하는 ​​모델과 디스플레이를 제어하는 ​​별도의 뷰 클래스가 있는 MVC 패턴을 채택하는 것입니다.이렇게 하면 동일한 장면에 대해 여러 보기를 갖는 것이 더 관리하기 쉽습니다.

스프라이트 내부의 비트 맵에 렌더링을하면 마우스 클릭을 캡처 할 수 있습니다.

마이크

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top