/ / AS3: nécessité de graphics.clear? - actionscript-3, mémoire, graphiques, dessiner

AS3: Nécessité de graphics.clear? - actionscript-3, mémoire, graphiques, dessiner

J'ai une fonction qui redessine une forme chaque fois qu'on l'appelle

function drawIt():void {
myShape.graphics.clear() //Is this necessary?
myShape.graphics.beginFill(newColor);
myShape.graphics.drawRect(0,0,w,h);
myShape.graphics.endFill();
}

Si cette fonction est appelée souvent commecolor et je ne fais pas le graphics.clear () à chaque fois, vais-je me retrouver avec une grosse pile de rectangles les uns sur les autres qui mange un tas de mémoire?

Réponses:

1 pour la réponse № 1

Pour répondre à votre question, jetez un coup d’œil à ce test simple:

var init_memory:uint = System.totalMemory;

var shape:Shape = new Shape();
for(var i:int = 0; i < 1000; i++){
shape.graphics.clear();
shape.graphics.beginFill(0xff0000);
shape.graphics.drawRect(0, 0, 10, 10);
shape.graphics.endFill();
}

trace(System.totalMemory - init_memory);    // gives : 4096 (bytes)

Soit maintenant commenter cette ligne:

//shape.graphics.clear();

on a :

trace(System.totalMemory - init_memory);    // gives : 102400 (bytes)

et pour une seule forme:

trace(System.totalMemory - init_memory);    // gives : 4096 (bytes)

Je pense que vous n'avez pas besoin de commentaires pour comprendre pourquoi vous devriez utiliser graphics.clear() ...

J'espère que ça peut aider.


2 pour la réponse № 2

Il est nécessaire ou bien tout nouveau dessin seraajouté sur le précédent. Si ce n'est pas l'effet dont vous avez besoin, alors vous devez appeler clear pour supprimer tout dessin précédent. Ce comportement peut être utilisé à votre avantage pour rogner une partie d'un dessin précédent. Vous pouvez dessiner un rectangle, disons noir, puis dessiner sur un cercle (même couleur) et le résultat est un recadrage.

Bottom line: Si vous n'appelez pas clear, tous les dessins s'ajoutent.