Frage

Von rechts jetzt.Ich habe 3 Objekte.Eine BitMap, die fungiert als meine Leinwand.Und 2 bitmapDatas.Ist mein Puffer und die andere ist meine Fliesen.Ich bin erstellen einer Fliesen-Effekt für ein Spiel.Ich möchte meine Fliesen:BitMapData, und verwandeln Sie es in ein benutzerdefiniertes Objekt.Grund dafür ist, ich möchte jede Fliese interaktiv zu sein.Also ich kann Sie auf jeden.Ist es möglich meine bitMapData, die für eine Kachel, in ein benutzerdefiniertes Objekt mit Eigenschaften und Methoden.Wie eine Art Film clip.und ziehen Sie es in meinen Puffer ??Könnte ich eine neue Klasse erstellen, reicht bitMapData ??Oder müsste ich, um loszuwerden, die Puffer und ziehen Sie die Kachel, die Objekte direkt in die BitMap ??

In anderen Worten, was ist der beste Weg, um die Sprite-oder eine Kachel in ein BitMapData-Objekt oder auch eine Bitmap sein.

War es hilfreich?

Lösung

Erste von alle, BitmapData-und Bitmap-sind nicht austauschbar.Sie sind zwei sehr verschiedene Dinge.Die BitmapData-Klasse enthält die bitmap-pixel-Daten und die Möglichkeit, Sie zu manipulieren, dass die pixel-Daten, z.B.zeichnen Sie es, ändern Sie die Farbe bestimmter Pixel, et c.Es gibt keine Möglichkeit, die Anzeige von einem BitmapData direkt, d.h.durch das hinzufügen es zu die display Liste.

Die Bitmap-Klasse, auf der anderen Seite, ist ein DisplayObject, wie Videoclips und Sprites, die Sie können der Anzeigeliste hinzufügen.Es ist der einzige Zweck ist zu machen ein BitmapData-in der Liste anzeigen.In der Tat, es ist auch nicht interaktiv, so dass Sie nicht erkennen können, klickt direkt auf eine Bitmap-Instanz, zum Beispiel.

Auf Ihre Frage:Wenn Sie eine bitmap-Daten enthält, eine Fliese Sprites, und Sie zeichnen möchten, dass die Fliesen in ein weiteres bitmapdata, können Sie die BitmapData.draw () - Methode oder die BitmapData.copyPixels () - Methode.Letzteres ist eines der schnellsten Methoden, die Sie verwenden können, auf alle BitmapData, so würde ich es sehr empfehlen.

Je nach Ihrer Anwendung ist es nicht von Vorteil sein könnte zu ziehen, alles in eine bitmap an alle.Es klingt, als ob Sie in der Lage sein zu erkennen, klicken Sie auf Ereignisse, die sich auf alle Kacheln, die macht mich denken, dass Sie würden wahrscheinlich davon profitieren, dass Sie getrennt werden DisplayObjects neu, z.B.Sprites.

Wenn Sie möchten, können Sie ein Tile-Klasse, die Sprite erweitert, und zieht ein BitmapData-mit bitmap-Füllung.So können Sie haben alle Eigenschaften, die Sie wollen, und auch erkennen, Maus-Ereignisse auf der Kachel-Instanzen.

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

Diese Klasse konnte einfach instanziiert werden für jede Kachel im Spiel, vorbei in die bitmap-Daten, die gezeichnet werden sollen, die in die Fliese.Sie könnten auch hören, für die Ereignisse auf eine solche Kachel-Instanz.

var tile : Tile;

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

addChild(tile);

Diese Weise, Sie nicht haben zu verwenden Sie die Bitmap-Klasse überhaupt zu Rendern der Kacheln.Sie können direkt Hinzugefügt werden, die display Liste.

Andere Tipps

Ich stelle dar, um eine bessere Lösung, wenn Sie bestimmte Teile der Fliese auswählen möchten, ohne die Position des Sprites bewirkt selbst

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

Ihr Recht, lassen drawRect bei 0, 0 Matrix.Translate verwenden, können Sie die Positionierung von dem, was Teil der Fliese, ohne dass Sie möchten, bewegen, um die Sprite-Position zu beeinflussen selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top