Olá, está cansado de usar FOR ou WHILE para percorrer seus vetores? Essa funcionalidade também suportada pelo Array facilita executar um bloco de comandos para cada ítem, assim como deixa seu código e lógica muito mais desacoplados.
Se ainda não conhece a classe Vector, clique aqui para ver o post que fiz sobre a classe. Vale a pena dar uma olhada e entender o porque de usá-la ao invés do Array. Mas se já conhece, vamos ao estudo de caso…
O caso é simples, você tem 200 bolinhas coloridas na tela e quer usar a mesma lógica de colorir (da criação) quando uma delas for clicada pelo usuário. Nesse caso podemos criar um único método que encapsulará essa lógica e usá-la na criação, e como callback no ForEach.
Código fonte abaixo…
1: package
2: {
3: import flash.display.Graphics;
4: import flash.display.Sprite;
5: import flash.events.MouseEvent;
6:
7: [SWF( width = "500", height = "300" )]
8: /**
9: * Classe das Bolinhas Coloridas
10: *
11: * @author Idemax Green
12: * @blog www.idemax.net
13: * @idemax www.twitter.com/idemax
14: *
15: */
16: public class ColorBalls extends Sprite
17: {
18: private static const _BALLS_LEN:uint = 200;
19:
20: private var _ballsMap:Vector.<Sprite>;
21:
22: /**
23: * Construtor.
24: */
25: public function ColorBalls()
26: {
27: _ballsMap = new Vector.<Sprite>( _BALLS_LEN );
28:
29: createBalls();
30: }
31:
32: /**
33: * Troca a cor da bolinha.
34: *
35: * @param $item Sprite da bolinha.
36: * @param $index Índice do ítem no vector (_ballsMap).
37: * @param $vector Vector _ballsMap.
38: *
39: */
40: private function colorBall( $item:Sprite,
41: $index:int = NaN,
42: $vector:Vector.<Sprite> = null ):void
43: {
44: var graph:Graphics = $item.graphics;
45:
46: graph.clear();
47: graph.beginFill( 0xFFFFFF * Math.random());
48: graph.drawCircle( 0, 0, 15 );
49: graph.endFill();
50: }
51:
52: /**
53: * Cria, colore, adiciona no mapa e na tela, e adiciona o evento de CLICK.
54: */
55: private function createBalls():void
56: {
57: var ball:Sprite;
58: var stageWidth:uint = stage.stageWidth;
59: var stageHeight:uint = stage.stageHeight;
60:
61: for( var i:uint = 0; i < _BALLS_LEN; i++ )
62: {
63: ball = new Sprite();
64:
65: colorBall( ball );
66:
67: ball.x = Math.abs( stageWidth * Math.random());
68: ball.y = Math.abs( stageHeight * Math.random());
69:
70: _ballsMap[ i ] = ball;
71:
72: addChild( ball );
73:
74: ball.addEventListener( MouseEvent.CLICK, onBallMouseClick );
75: }
76: }
77:
78: /**
79: * Handler do evento de CLICK na bolinha.
80: *
81: * @param $event
82: *
83: */
84: private function onBallMouseClick( $event:MouseEvent ):void
85: {
86: _ballsMap.forEach( colorBall );
87: }
88: }
89: }
Qualquer dúvida, postem nos comentários.
Nenhum comentário:
Postar um comentário