AS3 - Не уверен, как это называется - PullRequest
0 голосов
/ 12 декабря 2011

Я пишу игру, которая включает в себя груз, и я планирую иметь большое количество типов грузов.В настоящее время у меня есть класс Cargo, и у корабля, перевозящего груз, есть массив Cargo s, которые он держит.

Я бы действительно не хотел, чтобы на каждом корабле была куча объектов, когда всеЯ действительно хочу знать, сколько грузов у ​​каждого корабля.Особенно, когда эти корабли будут создаваться и отбрасываться много.

Я уверен, что вещь, которую я ищу, настолько проста, что я буду выглядеть глупой даже для того, чтобы спросить, но я знаю, что есть что-то похожее на массивкоторый содержит объект и связанную ценность.Я хочу использовать это для ссылки на тип Cargo из статического массива и удерживать количество.

Как это называется?Как бы я использовал это (то есть, какие общие функции используются для этого)?Некоторые фрагменты кода и терминология были бы идеальными.

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

Просто сделайте свой класс груза содержащим свойство Количество.

Или у вас может быть класс CargoType, который содержит информацию о типе Cargo (т. Е. Будь то продукты питания, деньги или оружие). Тогда ваш класс Cargo будет иметь свойство CargoType и свойство количества.

Таким образом, ваш массив для груза корабля будет иметь только груз каждого типа, а свойство Количество используется для указания количества.

1 голос
/ 12 декабря 2011

Возможно, вы ищете класс Dictionary . Это похоже на массивы (которые используют целочисленные индексы) или объекты (которые могут использоваться в качестве строковых ассоциативных массивов). Словарь использует объекты как уникальные ключи, которые отображаются на одно значение.

Думаю, тебе он не нужен. Глобальная переменная редко бывает хорошей идеей. Я не стал бы излишне усложнять это и просто позволил бы каждому кораблю обрабатывать свой собственный груз, возможно, используя количество, предложенное AaronLS . Но не стоит сильно беспокоиться о производительности, даже если вы создаете и уничтожаете тысячи кораблей в каждом кадре, их рендеринг займет значительно больше времени, чем обработка массивов.

Во всяком случае, вот как вы используете словарь и некоторые вещи, чтобы рассмотреть. У него нет особых методов, он используется почти как массив.

var dict = new Dictionary();
var key:MyClass = new MyClass(); // a key can be of any class 

dict[key] = "foo"; // set a value
trace( dict[key] ); // traces: foo

dict[key] = null; // set value to null, key is still there. It won't get garbage collected!
delete dict[key]; // remove the key

Рассмотрите возможность использования new Dictionary (true) , чтобы избежать проблемы со сборкой мусора.

...