Question

En ce moment. J'ai 3 objets. Un BitMap qui agit comme ma toile. Et 2 bitmapDatas. L'un est mon tampon et une autre est mes tuiles. Je crée un effet de mosaïque pour un jeu. Je voudrais prendre ma tuile: bitmapData, et la transformer en un objet personnalisé. la raison est que je veux être chaque tuile soit interactive. Donc, je peux cliquer sur chacun d'eux. Est-il possible de transformer mes bitmapData qui représente une tuile, dans un objet personnalisé qui a des propriétés et méthodes. Un peu comme un clip. et d'en tirer dans mon tampon ?? Puis-je créer une nouvelle classe qui étend bitmapData ?? Ou devrais-je me débarrasser de la mémoire tampon et d'en tirer les objets de tuiles directement dans le BitMap ??

En d'autres termes, quelle est la meilleure façon de mettre Sprite ou une tuile dans un objet BitmapData ou même un Bitmap.

Était-ce utile?

La solution

Tout d'abord, BitmapData et Bitmap ne sont pas interchangeables. Ce sont deux choses très différentes. La classe BitmapData contient des données de pixel bitmap, et vous permet de manipuler que les données de pixels, par exemple attirer à elle, de modifier la couleur des pixels particuliers, et c. Il n'y a aucun moyen d'afficher un BitmapData directement, à savoir en l'ajoutant à la liste d'affichage.

La classe Bitmap, d'autre part, est un DisplayObject, comme MovieClips et sprites, qui vous peut ajouter à la liste d'affichage. Il est seul but est de rendre un BitmapData dans la liste d'affichage. En fait, il est même pas interactif, de sorte que vous ne pouvez pas détecter les clics directement sur une instance Bitmap, par exemple.

à votre question: Si vous avez une données bitmap qui contient un sprite de tuiles, et vous voulez dessiner cette tuile dans un autre BitmapData, vous pouvez utiliser la méthode BitmapData.draw () ou la méthode BitmapData.copyPixels () . Ce dernier est l'une des méthodes les plus rapides que vous pouvez utiliser sur tout BitmapData, donc je le recommande fortement.

En fonction de votre application, il pourrait ne pas être bénéfique pour tout dessiner dans un bitmap du tout. Il semble que si vous voulez être en mesure de détecter des événements de clic sur toutes les tuiles, ce qui me fait penser que vous auriez probablement bénéficier de les avoir séparés DisplayObjects être, par exemple Sprites.

Si vous le souhaitez, vous pouvez créer une classe de carreaux qui s'étend Sprite et dessine un BitmapData à l'aide d'un remplissage bitmap. De cette façon, vous pouvez avoir des propriétés que vous voulez, et détecter également les événements de la souris sur les instances de tuiles.

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;
    }
  }
}

Cette classe pourrait simplement être instancié pour chaque tuile dans votre jeu, en passant dans les données bitmap qui doit être établi dans la tuile. Vous pouvez également écouter les événements sur une instance de tuile.

var tile : Tile;

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

addChild(tile);

De cette façon, vous ne devez pas utiliser la classe Bitmap du tout pour rendre les tuiles. Ils peuvent être ajoutés directement à la liste d'affichage.

Autres conseils

Je figure une meilleure solution lorsque vous voulez sélectionner certaines parties de la tuile sans affecter la position de l'image-objet lui-même

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

Votre droit, laissez drawRect à 0, 0. En utilisant Matrix.translate, vous permet de déplacer le positionnement de quelle partie de la tuile que vous voulez, sans affecter la position de l'image-objet lui-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top