Bonjour à tous,
Expérimentant toujours et encore, je rencontre un problème dont je ne parviens pas à trouver la moindre piste pour le résoudre.
Dans ma bibliothèque, j'ai importé deux png que j'ai lié à ActionScript (leurs classes respectives Win et Fail, toutes deux héritent de BitmapData).
J'ai créé une classe ScratchCard dont le constructeur reçoit en argument une classe (en fait, Win ou Fail) pour en faire un objet Bitmap via son objet BitmapData.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class ScratchCard extends MovieClip
{
private var _cardData:BitmapData;
private var _cardBitmap:Bitmap;
public function ScratchCard(card:Class)
{
_cardData = new card(0, 0);
_cardBitmap = new Bitmap(_cardData);
_cardBitmap.x -= _cardBitmap.width >> 1;
_cardBitmap.y -= _cardBitmap.height >> 1;
addChild(_cardBitmap);
}
} |
Dans ma classe principale, j'ai créé un tableau de classes
private var _instantWin:Array = [Win, Win, Win, Fail, Fail, Fail, Fail, Fail, Fail];
Puis par l'intermédiaire d'une boucle, je crée 8 objets ScratchCard à partir de _instantWin
1 2 3 4
| for (var i:uint = 0; i <= 8; i++)
{
var scratchCard:ScratchCard = new ScratchCard(_instantWin[i] as Class);
} |
Pour l'instant, tout fonctionne comme je le souhaite.
Maintenant, je ne souhaite pas utiliser _instantWin dans l'ordre où j'ai inséré les classes donc je me propose de les mélanger aléatoirement
1 2 3 4 5 6 7 8 9 10 11 12
| private function doRandomBitmap():Array
{
var temp:Array = _instantWin.slice();
var returnArray:Array = new Array();
for (var i:uint = _instantWin.length; i > 0; i--)
{
var rng:Number = randomRange(0, temp.length - 1);
returnArray.push(temp.splice(rng, 1));
trace(returnArray);
}
return returnArray;
} |
randomRange() est une fonction qui me renvoie un chiffre entre 0 et la nouvelle longueur de temp après la méthode splice().
Là aussi, les différents trace() me confirment que returnArray contient bien les 8 classes dans un ordre différent.
Ma première tentative a été de remplacer _instantWin de cette façon :
1 2 3 4 5 6 7 8 9
| var cardToDraw:Array = new Array();
cardToDraw = doRandomBitmap();
var index:uint = 0;
_cards = new Vector.<ScratchCard>();
for (var i:uint = 0; i <= 8; i++)
{
var scratchCard:ScratchCard = new ScratchCard(cardToDraw[i] as Class);
_cards.push(scratchCard);
} |
mais j'ai obtenu cette erreur
TypeError: Error #1007: Tentative d'instanciation sur un élément non constructeur.
at ScratchCard()
at Take5/init()
Mes recherches m'ont permis de comprendre que je devais avoir un problème de transtypage que je pourrais éventuellement résoudre par un getDefinitionByName() pour récupérer la classe de l'objet correspondant mais je n'ai pas créé d'objets de classe Win ou Fail.
Comment puis-je me sortir de cette situation ?
Merci de votre aide
Partager