2010-06-04 5 views
1

Bonjour J'ai commencé à apprendre l'AS3 à partir d'un livre et j'ai trouvé quelque chose que je ne comprends pas.Qu'est-ce que cela signifie dans AS3?

Ellipse(_board[row][column]).fill = getFill(row, column); 
  • _board est deux dimensions de types Ellipse, donc je ne comprends pas pourquoi tout est Ellipse(Ellipse object) utilisé quand il fonctionne apparemment sans elle, ou je n'ai pas vu de changements quand je l'omettre.
+0

Quand vous omettez quoi? La référence à _board? La référence à Ellipse? –

+0

Oui référence à Ellipse, car je ne sais pas pourquoi il est utilisé de cette façon ... – Jarek

Répondre

3

Ellipse(_board[row][column]) est un type castType(object) Parce que vous pouvez pousser quoi que ce soit dans un Array le compilateur ne sait pas quel genre d'objets sont stockés dans le Array. Il est donc bon de lancer des objets si vous les renvoyez d'un Array à leur type correct.

Cela a plusieurs avantages:

  • si un tel objet n'est pas du type que vous attendez ou null, vous saurez quand vous Typecast au lieu d'obtenir une erreur plus tard, quelque part au loin
  • les exécute de code un peu plus vite si vous êtes explicite sur les types
  • si vous utilisez un bon IDE, il peut vous fournir autocomplétion quand il connaît les types
+0

Merci pour l'explication, la syntaxe de casting AS3 m'a troublé un peu – Jarek

0

_board est multidimensionnel tableau rempli d'abord avec des tableaux. Dans le BoardDisplay.mxml

(Bonjour Flex 4: Chapitre 3. Bonjour Spark: primitives, comp ...> FXG et MXML graphiques construire un jeu .. - Pg 80!).,

<Graphic version="1.0" viewHeight="601" viewWidth="701" 
    xmlns=" library://ns. adobe. com/flex/spark" 
    xmlns:fx=" http://ns. adobe. com/mxml/2009" 
    xmlns:mx=" library://ns. adobe. com/flex/halo" 
    initialize="createBoard()" 
    click=" clickHandler(event)"> 

initialise appelle createBoard().

private function createBoard():void { 
    newGame(); 
    _board = new Array(6); 
    for (var row:int = 0; row < 6; row++) { 
     _board[row] = new Array(7); 
     for (var col:int = 0; col < 7; col++) { 
      _board[row][col] = addEllipse(row, col); //Magic Happens! 
     } 
    } 
} 

addEllipse retourne Ellipse à chaque entrée dans _board

private function addEllipse(row:int, col:int):Ellipse { 
    var ellipse:Ellipse = new Ellipse(); 
    ellipse.x = 4 + col*100; 
    ellipse.y = 5 + row*100; 
    ellipse.width = 90; 
    ellipse.height = 90; 
    ellipse.fill = getFill(row,col); // Magic Found ! 
    ellipse.stroke = new SolidColorStroke(0x000000, 1, 1.0, false,"normal", null, "miter", 4); 
    boardGroup.addElement(ellipse); 
    return ellipse; 
} 

L'auteur casté comme maxmx dit, mais n'a pas vraiment besoin comme toutes les entrées étaient de type Ellipse si

Ellipse(_board[row][column]).fill = getFill(row, column); 

peut travailler comme

_board[row][column].fill = getFill(row, column); 
Questions connexes