Pregunta

A partir de este momento. Tengo 3 objetos. Un mapa de bits que actúa como mi lienzo. Y 2 bitmapDatas. Uno de ellos es mi memoria intermedia y otra es mis azulejos. Estoy creando un efecto de mosaico para un juego. Me gustaría llevar a mi baldosas: bitmapData, y convertirlo en un objeto personalizado. razón es que quiero cada baldosa sea interactiva. Así que se puede hacer clic en cada uno. ¿Es posible dar vuelta a mi bitmapData que representa un mosaico, en un objeto personalizado que tiene propiedades y métodos. Algo así como un clip de película. y dibujar en mi memoria intermedia ?? Podría crear una nueva clase que se extiende bitmapData ?? O tendría que deshacerse de la memoria intermedia y sacar el azulejo objetos directamente en el mapa de bits ??

En otras palabras, ¿cuál es la mejor manera de poner Sprite o un azulejo en un objeto BitmapData o incluso un mapa de bits.

¿Fue útil?

Solución

En primer lugar, BitmapData y de mapa de bits no son intercambiables. Son dos cosas muy diferentes. La clase BitmapData contiene datos de píxel de mapa de bits, y le permite manipular que los datos de píxeles, por ejemplo dibujar a ella, cambiar el color de particulares píxeles, et c. No hay manera de mostrar un BitmapData directamente, es decir, mediante la adición a la lista de visualización.

La clase de mapa de bits, por el contrario, es un DisplayObject, como clips de película y Sprites, que puede añadir a la lista de visualización. Es única finalidad es hacer un BitmapData en la lista de visualización. De hecho, ni siquiera es interactiva, por lo que no se puede detectar clics directamente en una instancia de Bitmap, por ejemplo.

a su pregunta: Si usted tiene un conjunto de datos de mapa de bits que contiene un sprite azulejo, y que desea dibujar esa ficha en otro BitmapData, puede utilizar el método BitmapData.draw (), o los BitmapData.copyPixels () método . Este último es uno de los métodos más rápidos que se pueden utilizar en cualquier BitmapData, por lo que recomiendo encarecidamente.

En función de la aplicación particular, podría no ser beneficioso para dibujar todo en un mapa de bits en absoluto. Suena como si usted quiere ser capaz de detectar eventos de clic en todas las fichas, lo que me hace pensar que es probable que se benefician de tener que ser separados, por ejemplo DisplayObjects Sprites.

Si lo desea, puede crear una clase del azulejo que se extiende Sprite, y dibuja un BitmapData usando un relleno de mapa de bits. De esa manera, puede tener propiedades que desea, y también detectar eventos de ratón en los casos de baldosas.

package
{
  /* ... imports ... */

  public class Tile extends Sprite 
  {
    private var _solid : Boolean;

    public function Tile(bmp : BitmapData, solid : Boolean)
    {
      this.graphics.beginBitmapFill(bmp, null, false, true);
      this.graphics.drawRect(0, 0, bmp.width, bmp.height);

      _solid = solid;
    }

    /**
     * Sample custom property. Could be used to define whether a tile
     * is solid, e.g. the player cannot pass it.
    */
    public function get isSolid() : Boolean
    {
      return _solid;
    }
  }
}

Esta clase podría ser simplemente una instancia para cada azulejo en su juego, que pasa en los datos de mapa de bits que debe extraerse de la baldosa. También podría escuchar los eventos en una instancia de dicha baldosa.

var tile : Tile;

tile = new Tile(myBitmapData, false);
tile.x = 200;
tile.y = 200;
tile.addEventListener(MouseEvent.CLICK, handleTileClick);

addChild(tile);

De esta manera, usted no tiene que utilizar la clase Bitmap en absoluto para hacer las baldosas. Se pueden añadir directamente a la lista de visualización.

Otros consejos

I figura una mejor solución para cuando se desea seleccionar determinadas partes de la baldosa sin afectar la posición de la propia

sprites
theMatrix.translate(30,0);
this.graphics.beginBitmapFill(tileImage,theMatrix);
//this.graphics.drawRect(0, 0,tWidth ,tHeight );
this.graphics.endFill();

Su derecho, dejar drawRect a 0, 0. usando Matrix.Translate, le permite mover el posicionamiento de qué parte de la baldosa que desee, sin afectar a la posición del sprite en sí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top