Вы не можете делать то, что хотите.Не- static
локальные переменные связаны с их областью действия .Они видны только внутри и уничтожаются, когда программа выходит из области, ограниченной скобками {}
.
Самое простое решение - пойти в совершенно другом направлении.Добавьте к переменной Unit
a private
, чтобы она содержала Rect
, например,
Rect sprite;
Затем замените
void createUnit(int type, int x, int y);
конструктором Unit
void Unit(int type, int x, int y);
И реализовать конструктор, например,
void Unit::Unit(int type, int x, int y): sprite(unitImageWidth,
unitImageSizeHeight,
x,
y,
type == 0? "res/unit1.png": "res/unit2.png")
{
}
Двоеточие :
запускает Список инициализирующих элементов , и этот сумасшедший ?:
является одной строкой, если оператор называется Тернарный или условный оператор
Примечание: я не знаю, что такое unitImageWidth
и unitImageSizeHeight
или откуда они берутся.Убедитесь, что вы делаете и убедитесь, что они доступны.
moveUnit
становится
void Unit::moveUnit(int x)
{
sprite.movex(x);
}
, потому что sprite
знает, что это такое и какое изображение было загружено, и может перемещать Rect
до x
(или что делает movex
).
Чтобы использовать вас
Unit myUnit(0, 1024, 42); // creates a unit of type 0 at coordinates 1024,42
myUnit.movex(88); // moves myUnit to 88,42 (I think)