Поймите, что SparklyUnicornBullet
на самом деле является функцией-членом, которая возвращает объект PS2Sprite
. Возвращенный PS2Sprite
имеет функцию-член ScaleAbsolute
, которую вы хотите вызвать. Таким образом, ваш код выше почти правильно. Вам просто не хватает ()
:
MagicalUnicornBullets[i].SparklyUnicornBullet().ScaleAbsolute(4,4);
Тем не менее, есть ряд вещей, которые плохо с вашим кодом. Например, вы объявляете массив, имя которого совпадает с именем объекта:
MagicalUnicornBullets MagicalUnicornBullets[25];
Я думаю, что это разрешено, но это настолько злобно и плохо мотивировано, что я даже не могу сказать, что для Certian, потому что я бы отверг любой такой код, независимо от его мотивации или законности. Вы должны дать массиву другое имя:
MagicalUnicornBullets bullets[25];
Далее, ваш цикл инициализации не нужен. Код:
MagicalUnicornBullets MagicalUnicornBullets[25];
создает массив в стиле C размером 25 MagicalUnicornBullets
, вызывая конструктор по умолчанию для каждого из них. Поэтому проще всего просто предоставить конструктор по умолчанию, который делает то, что вы хотите:
struct MagicalUnicornBullets {
MagicalUnicornBullets();
// ...
};
MagicalUnicornBullets::MagicalUnicornBullets()
: onscreen(false)
{
SparklyUnicornBullet().ScaleAbsolute(4,4)
}
Теперь цикл вообще не нужен. Все 25 будут построены и инициализированы так, как вы хотите.
Наконец, обычно в C ++ выгодно вообще не использовать массив в стиле C, а класс коллекции, такой как std::vector
.