Классовые массивы - PullRequest
       1

Классовые массивы

0 голосов
/ 11 марта 2011

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

Пример: я создаю класс Dog. Собака имеет 3 анимации, состоящие из нескольких индексов кадров, представляющих положение кадра в текстурном атласе. В файле класса я хочу определить эти анимации так:

const int animations[3] = {
    {1,2,3}, //walk
    {4,5,6}, //jump
    {1,7,8,9,10,11} //take a wiz
}

@implementation...

Это, конечно, не правильный Obj-C, но есть ли способ сделать что-то подобное? Каждый экземпляр Dog будет иметь одинаковую анимацию, поэтому я не хочу тратить впустую память, сохраняя анимации в переменных экземпляра. Если возможно, я бы хотел избежать использования NSArray.

Есть ли способ хранить двумерные массивы переменных переменной типа int на уровне класса?

Ответы [ 3 ]

1 голос
/ 11 марта 2011

Вы, безусловно, можете объявить статический 2-мерный массив целых чисел.Например:

static int animations[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

Поскольку это объявлено как "статическое", animations не будет видимо вне области исходного файла, который его объявляет, и будет только одна копия массива.

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

Для этого вы можете использовать массив указателей:

static int walk[] = {1,2,3};
static int run[] = {4,5,6};
static int wiz[] = {1,2,3,4,5,6};
static int *animations[3] = {walk,run,wiz};

(В этом случае, конечно, вам понадобятся другие средства, чтобы узнать, когда вы дойдете до конца строки, поскольку они не все одинаковой длины. Например, может быть, конецстрока помечена значением '0' или '-1'.)

0 голосов
/ 11 марта 2011

Объявите статическую глобальную переменную в файле .m, так же, как вы делали бы это в C. Если вам нужен доступ к ней вне класса, создайте метод класса (например, + (const int *)animations) для использования в качестве средства доступа.

0 голосов
/ 11 марта 2011

Можно хранить двумерные массивы на любом уровне, который вы хотите, но 2D-массивы, в которых строки имеют переменную длину, обычно не так полезны, за исключением особых случаев.

В любом случае, традиционный способ притворяться, будто Objective-C имеет переменные класса, - это просто сделать статическую переменную в файле реализации класса и создать методы класса для доступа к ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...