Como evitar um singleton neste exemplo?

5

Eu tenho uma imagem de classe e outra ImageStore. A imagem é apenas um objeto de valor contendo o nome do pacote e o nome da imagem. O ImageStore faz todo o trabalho real: calcula o caminho real da imagem (com base no nome do pacote e da imagem) e o carrega do servidor.

Agora eu tenho uma hierarquia bastante grande (e profunda) de nós (este é um mecanismo de renderização para um jogo), por exemplo, agora estou em um grupo e quero inserir uma nova imagem. Eu faço:

var image = new Image("packageName", "imageName");

Neste momento, a imagem ainda não tem tamanho, pois não quero codificar o tamanho da imagem (nesse caso, pode ser um bloco, que nem sempre é 64 * 32, por exemplo) vista do jogo.

  • quando a imagem for adicionada ao grupo (suponho que o grupo já esteja anexado ao renderizador) , o grupo será invalidado
  • o renderizador solicitará uma nova renderização de quadro.
  • ele irá analisar a árvore de hierarquia do nó e quando encontrar a imagem que eu adicionei antes
  • ele perguntará ao ImageStore (ou TileImageStore, este não apenas armazena a largura e a altura, mas também o ponto central inferior do bloco. Isso somente quando o centro inferior do bloco não corresponde ao centro inferior ponto da imagem real.) para o ImageData;
  • o ImageStore agora carrega o pacote, que também tem informações sobre a largura e a altura;
  • aplicará a nova largura e altura à imagem e definirá um sinalizador conforme carregado.

Eu gostaria de ter de alguma forma o ImageStore desanexado da render. Para poder usar apenas a imagem e o ImageStore sem a necessidade do renderizador.

Editar: Eu quero fazer isso porque eu gostaria de saber o tamanho de uma imagem mesmo quando a imagem não é renderizada. Para obter a imagem, é necessário solicitar ao ImageStore o tamanho, a âncora e o imageData. Os pacotes são assim:

package = {image01: {base64: "very very long string", width: 10, height: 20, anchorX: 1, anchorY: 10}}

Somente depois que o ImageStore é carregado, esse arquivo grande é capaz de saber a largura / altura da imagem;

    
por Totty.js 05.03.2013 / 23:19
fonte

2 respostas

3

Você acabou de criar um ImageStore e passá-lo para um Renderer que você faz. Não há motivo para solteiros aqui.

    
por 06.03.2013 / 13:32
fonte
0

Sem realmente saber mais detalhes:

Sugerir que você renomeie sua estrutura de imagem existente para ImageInfo E crie um novo objeto chamado SelfLoadingImage, que tem uma interface de 'Imagem' que o Renderer pode usar para obter dados de pixel reais ou qualquer outra coisa.

Então, sob o capô, como esses dados de pixel são recuperados é um problema diferente que o Renderer não se importa. Agora você pode, por exemplo, ter um HardcodedImage para fins de teste.

No caso de um SelfLoadingImage, ele possui um construtor que usa um ImageInfo e um ImageStore e os usa quando necessário. Mas essas instâncias de SelfLoadingImage são adicionadas como objetos 'Imagem' ao seu sistema de renderização.

    
por 06.03.2013 / 13:35
fonte