Squeak.ru - шаблоны программирования

Сериализация as3corelib идет не так

я получаю сообщение об ошибке

Ошибка № 2099: объект загрузки недостаточно загружен для предоставления этой информации.

когда я пытаюсь закодировать объект в JSON, используя as3corelib. Мне удалось закодировать некоторый объект-значение, у которого нет родителя или потомка, поэтому я знаю, что библиотека работает, и эта проблема может быть связана с addChild или чем-то в этом роде. Это просто предположение.

Доска добавляется на сцену следующим образом:

stage.addChild(board);

Когда я не добавляю плату на сцену и пытаюсь ее сериализовать, я получаю другую ошибку:

undefined
at XML/http://adobe.com/AS3/2006/builtin::copy()
at global/describeTraits()
at global/avmplus::describeType()
at global/flash.utils::describeType()
    ...

Класс платы:

public class Board extends Sprite
{
    public var board:Array;
    public var blockColor:uint = 0xE3E3E3;
    public var blockLength:uint

    public function Board(blockLength:uint)
    {
        super();
        x = 0;
        y = 0;
        this.blockLength = blockLength;
        //buttonMode = true;
        // Setting up two dim array
        board = new Array(10);
        for (var k:int = 0; k < board.length; k++) 
        {
            board[k] = new Array(10);
        }


        for (var i:int = 0; i < 10; ++i) 
        { 
            for(var j:int = 0; j < 10; ++j)
            {
                var block:Block = new Block(i*blockLength, j*blockLength);  
                board[i][j] = block;
                this.addChild(block); // here I add children
                block.drawBlock(blockLength, blockColor);
                block.addEventListener(MouseEvent.CLICK, blockClicked);
            }
        }           
    }

    ....

}

}

Вот код для Блока, на самом деле там ничего нет.

public class Block extends Sprite
{

    public var cos:int = 5; // test

    public function Block(x:uint, y:uint)
    {
        ...
    }

    public function drawBlock(length:uint, color:uint):void
    {
        ...
    }
}

Любые подсказки, почему это?


Ответы:


1

Я бы посоветовал вам не пытаться сериализовать какую-либо форму DisplayObject; вместо этого вы должны просто сериализовать базовые данные (атрибуты), которые использует представление; трудно дать вам точный ответ из приведенного выше кода, но учтите следующее:

// Simple Model object which represents the BlockView's underlying data.
public class BlockViewModel {
    public var x : Number;
    public var y : Number;
}

// Renders the BlockViewModel on screen.
public class BlockView extends Sprite {
    public var position : BlockViewModel;

    // Constructor requires a BlockViewModel object.
    public function BlockView(position : BlockViewModel) {
        this.position = position;
        draw();
        reposition();
    }

    private function draw() : void {
        // Omitted...
    }

    // Update the block's position based on the model.
    private function reposition() : void {
        this.x = this.position.x;
        this.y = this.position.y;
    }

    // Setter for the block's current position.
    public function setX(value : Number) : void {
        this.position.x = value;
        reposition();
    }
}

В приведенном выше примере вы просто сериализуете объект BlockViewModel, когда хотите сохранить состояние, например:

var serailizedBlockData : String = JSON.encode(blockView.position);

Затем вы можете воссоздать новый BlockView, десериализовав данные:

// Convert from JSON -> Object.
var blockData : Object = JSON.decode(serializedBlockData);

// Create and populate a BlockViewModel with the deserialized data.
var position : BlockViewModel = new BlockViewModel();
position.x = blockData.x;
position.y = blockData.y;

// Create a new view using the serialized data.
var blockView = new BlockView(position);

Вы можете расширить это, переместив логику построения/заполнения объекта в фабричный метод, чтобы помочь разделить логика.

22.05.2012
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...