2015-09-17 3 views
0

Я получил ошибкиобъекта не является членом объекта (ЕДИНСТВО РЕДАКЦИЮ)

активов/TextPierwszy.js (22,28): BCE0019: 'Идентификатор' не является членом 'Object' , Активы/TextPierwszy.js (24,38): BCE0019: «id» не является членом «Объекта».

при попытке скомпилировать этот скрипт в UnityScript.

#pragma strict 
private var pole : UI.Text; 
public var Started = false; 

public var Ludnosc = new Array(); 

public class Human { 
    public var id : byte; 
    public var gender : byte; // 0=k 1=m 
    public var age : byte; 
    public var pregnant : byte; 
    function Breed(partner) { 
     // Tu będzie logika rozmnażania 
    } 
    public var parents : int[]; //Najpierw podajemy ID matki, potem ID ojca. 
} 

function Test1() { 
    if(!Started) { 
     Started = true; 
     Ludnosc.push(new Human()); 
     Ludnosc[0].id = 1; //Line number 22 
     Debug.Log(Ludnosc.length); 
     Debug.Log(Ludnosc[0].id); //Line number 24 
     } 
} 

Как я могу сказать компилятору, чтобы отслеживать Ludnosc [0] в качестве экземпляра человека вместо отслеживания его на простом объекте? Или есть проблема в другом месте? Также попробовал
public var Ludnosc : Human = new Array();
но это не работает. :(

ответ

2

Это происходит потому, что при инициализации Ludnosc с помощью:.

public var Ludnosc = new Array(); 

вы создаете массив элементов Object В результате, при попытке получить доступ к Ludnosc[0].id, Ludnosc[0] обрабатывают Object и следовательно, не имеет id имеющуюся в его распоряжении

чтобы решить эту проблему, либо инициализировать Ludnosc как встроенный в массив так:.

public var Ludnosc : Human[]; 

Ludnosc = new Human[1]; // When you're initializing it 
Ludnosc[0] = new Human(); // When you're populating it 

Или, если вы действительно хотите использовать массив JavaScript, вы можете сделать ObjectHuman, когда вы получите доступ к значению в Test1(), измените версию с типом, затем поместите его обратно в массив (не протестировали этот код):

function Test1() { 
    if(!Started) { 
     Started = true; 
     Ludnosc.push(new Human()); 
     var tempHuman = Ludnosc[0] as Human; 
     tempHuman.id = 1; 
     Ludnosc[0] = tempHuman; // Overwriting with the updated Human 
     Debug.Log(Ludnosc.length); 
     Debug.Log(tempHuman.id); 
    } 
} 

Надеюсь, это поможет! Дайте знать, если у вас появятся вопросы.

+0

спасибо! Второе решение работает отлично, потому что мне нужен массив _unlimited_, который мне не нужно повторно инициализировать, когда я хочу получить больше «пространства» для большего количества людей. –

+0

Отлично! Я рад, что смог помочь. – Serlite

Смежные вопросы