2009-12-29 4 views
0

Le titre pourrait être un peu trompeur. Regardez mon code et je vais vous expliquerL'objet graphique bitMapData est-il le même que le type bitmapData?

public static function loadTile(tileDir:String = "empty"):void 
     { 
      if(tileDir != "empty") 
      { 
       tPoint = new Point(0,0); 
       tRect = new Rectangle(0,0,30,30); 

       //load in tile sheet image 
       loader = new Loader(); 
       loader.contentLoaderInfo.addEventListener(Event.INIT,tilesLoadInit); 
       loader.load(new URLRequest(tileDir)); 
      } 
     } 

     private static function tilesLoadInit (e:Event):void { 
      tileImage = Bitmap(loader.content).bitmapData; 
      tileReady.dispatchEvent(new Event("TileReady")); 
     } 
var tImage:BitmapData = new BitmapData(30,30); 
tileNum = tileNumber; 
tPoint.x = 0; 
tPoint.y = 0; 

tRect.x = 0; 
tRect.y = 0; 

tImage.copyPixels(tileImage,tRect,tPoint); 

this.graphics.beginBitmapFill(tImage); 
this.graphics.drawRect(0, 0,tWidth ,tHeight); 

Je crée un bitMapData vide appelé tImage. Je prends alors une variable prédéfinie appelée tileImage qui est aussi un bitMapData et contient une image d'une image. tRect est prédéfini et sa largeur et sa hauteur sont 30x30. Je copie un morceau de l'image et je l'ai mis en tImage. problème est que AS3 jette une erreur en disant que tImage est un type incorrect

ArgumentError: Error #2015: Invalid BitmapData. 

Mais clairement ce n'est pas. Ma question est qu'il y a quelque chose de différent à propos du type de données bitMapData et bitMapData que l'objet graphique accepte? J'essaie de faire du carrelage avec des sprites. Je veux que mes mosaïques soient interactives, c'est pourquoi j'utilise l'objet sprite au lieu d'utiliser des bitMaps réguliers pour représenter mes carreaux. Vous pourriez vous demander pourquoi je ne voudrais pas utiliser graphics.beginBitmapFill (tImage); et graphics.drawRect (0, 0, tWidth, tHeight); pour choisir les tuiles que je veux utiliser. Eh bien raison est parce qu'il se trouve que drawRect() premier et deuxième paramètres réellement modifier l'emplacement de l'endroit où le sprite réel se trouve. Donc, si je mets les propriétés x et y de l'image-objet à x = 20, et y = 20. alors je règle mon drawRect (20,20). il ajoute en fait 20 pixels supplémentaires à mes coordonnées x et y de mon sprite. Et je connais la raison pour laquelle, j'ai juste besoin de connaître un meilleur moyen. Désolé pour tant d'écriture et merci pour votre temps!

Répondre

0

Il ne dit pas que le type est faux, il dit que l'objet n'est pas valide. Je m'attends à ce que vous obteniez un TypeError si le type était erroné.

Vous n'avez pas non plus indiqué exactement où l'erreur a été déclenchée, et supposons que le problème est lié à tImage sur la 8ème ligne. Il semble plus probable que le problème provient de tileImage (dont vous n'avez donné aucun détail) sur la ligne 7.

+0

j'ai ajouté plus de détails sur tileImage. Comme je l'ai déjà dit, c'est un bitMapData, et ça marche. Si je passe tileImage dans la méthode beginBitmapFill au lieu de tImage. cela fonctionne et je ne reçois aucune erreur. mais si à la place j'essaye de recadrer l'image d'abord et de la transmettre, c'est quand l'erreur ci-dessus se produit. Ils sont tous les deux des types bitMapdatas, sauf quand je décide de recadrer l'image d'abord en utilisant la méthode copyPixel, cela ne marche pas. – numerical25

+0

Désolé si je ne peux pas être aussi détaillé. Mais en un mot, tout bitMapData qui obtient le contenu d'une méthode copypixel, ne fonctionne pas dans une méthode beginBitmapFill. C'est toujours un type bitMapData, mais ça ne marche pas. Je suis juste curieux de savoir pourquoi – numerical25

0

Ceci est probablement dû à la limite intégrée de Flash à la taille des objets BitmapData. Si le nombre total de pixels est supérieur à 16 777 215, l'erreur # 2015 est levée.

Vous pouvez lire à ce sujet dans les documents: BitmapData, juste au-dessus "Voir les exemples".

Voici une astuce qui permet de travailler si vous voulez donner un coup de feu: BitmapData workaround

Questions connexes