Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

accessing object variable in arrayList

Discussion in 'Scripting' started by roylisto, Sep 4, 2012.

  1. roylisto

    roylisto

    Joined:
    Jul 3, 2012
    Posts:
    14
    i follow unity 3D game development by example begginers ebook, but i've stuck in this problem, i have an error when i try to compile the code

    here is my code

    pragma strict
    var cols:int=4;
    var rows:int=4;
    var totalCards:int =cols*rows;
    var matchesNeededToWin:int=totalCards*0.5;
    var matchesMade:int=0;
    var cardW:int=100;
    var cardH:int=100;
    var aCards:Array;
    var aGrid:Card[,];
    var aCardsFlipped:ArrayList;
    var playerCanClick:boolean;
    var playerHasWon:boolean=false;
    var i:int;
    var j:int;
    function Start () {
    playerCanClick=true;

    aCards=new Array();
    aGrid=new Card[rows,cols];
    aCardsFlipped=new ArrayList();
    BuildDeck();
    for(i=0;i<rows;i++){
    for(j=0;j<cols;j++){
    //aGrid[i,j]=new Card();
    var someNum:int=Random.Range(0,aCards.length);
    aGrid[i,j]=aCards[someNum];
    aCards.RemoveAt(someNum);
    }
    }
    }

    function OnGUI () {
    GUILayout.BeginArea(Rect(0,0,Screen.width,Screen.height));
    BuildGrid();
    GUILayout.EndArea();
    }
    function BuildGrid(){
    GUILayout.BeginVertical();
    GUILayout.FlexibleSpace();
    for(i=0;i<rows;i++){
    GUILayout.BeginHorizontal();
    GUILayout.FlexibleSpace();
    for(j=0;j<cols;j++){
    var card:Card=aGrid[i,j];
    var img:String;
    if(card.isFaceUp){
    img=card.img;
    }else
    {
    img="wrench";
    }
    if(GUILayout.Button(Resources.Load(img),GUILayout.Width(cardW))){
    if(playerCanClick){
    FlipCardFaceUp(card);
    }
    Debug.Log(card.img);
    }
    }
    GUILayout.FlexibleSpace();
    GUILayout.EndHorizontal();
    }
    GUILayout.FlexibleSpace();
    GUILayout.EndVertical();
    }
    function BuildDeck(){
    var totalRobots:int=4;
    var card:Object;
    for(i=0;i<totalRobots;i++){
    var aRobotParts:Array=["Head","Arm","Leg"];
    for(j=0;j<2;j++){
    var someNum:int=Random.Range(0,aRobotParts.length);
    var theMissingPart:String=aRobotParts[someNum];

    aRobotParts.RemoveAt(someNum);
    card=new Card("robot"+(i+1)+"Missing"+theMissingPart);
    aCards.Add(card);

    card=new Card("robot"+(i+1)+theMissingPart);
    aCards.Add(card);
    }
    }
    }
    function FlipCardFaceUp(card:Card){
    card.isFaceUp=true;
    aCardsFlipped.Add(card);
    if(aCardsFlipped.Count==2){
    playerCanClick=false;
    yield WaitForSeconds(1);

    aCardsFlipped[0].isFaceUp=false;<----this line is have an error
    aCardsFlipped[1].isFaceUp=false;<----this line is have an error
    aCardsFlipped=new ArrayList();
    playerCanClick=true;
    }
    }
    class Card extends System.Object{

    public var isFaceUp:boolean=false;
    var isMatched:boolean=false;
    var img:String;

    function Card(img:String){
    this.img=img;
    }
    }

    here is the error log
    Assets/Scene/GameScript.js(91,34): BCE0019: 'isFaceUp' is not a member of 'Object'.
    Assets/Scene/GameScript.js(92,34): BCE0019: 'isFaceUp' is not a member of 'Object'.

    how to solve this problem?
     
  2. PAEvenson

    PAEvenson

    Joined:
    Nov 12, 2009
    Posts:
    47
    typecast it to whatever object it is...example: ((Card)aCardsFlipped[0]).isFaceUp
     
  3. roylisto

    roylisto

    Joined:
    Jul 3, 2012
    Posts:
    14
    thanks , i will try your suggestion :D
     
  4. roylisto

    roylisto

    Joined:
    Jul 3, 2012
    Posts:
    14
    Assets/Scene/GameScript.js(93,24): BCE0044: expecting ), found 'aCardsFlipped'.
    Assets/Scene/GameScript.js(93,40): BCE0043: Unexpected token: ).

    i have this error
     
  5. PAEvenson

    PAEvenson

    Joined:
    Nov 12, 2009
    Posts:
    47
    Uhh weird.. you can also put it in a var like so:
    Code (csharp):
    1.  
    2. var card0:Card = aCardsFlipped[0];
    3. card0.isFaceUp=false;
    4. var card1:Card = aCardsFlipped[1];
    5. card1.isFaceUp=false;
    6.  
    7.  
     
  6. roylisto

    roylisto

    Joined:
    Jul 3, 2012
    Posts:
    14
    thanks again, it's work :)