Как я могу создать смещение на UIImageView

Я недавно разместил вопрос здесь

Случайно генерируемые стены туннеля, которые не прыгают от одного к другому

Это в значительной степени сказало, что я получаю туннель "пьяной прогулки" вместо коррелированного из-за отсутствия алгоритма.

Ответ работает до такой степени, что я пытаюсь создать, но я не мог понять, как правильно реализовать алгоритм для моей игры.

Я считаю, что первый шаг - создать смещения для пар стен. Я хочу, чтобы изображения, которые появлялись (названные: "Left1" и "Right1", "Left2 и"Right2".... "Left41"и Right41") на каждой стороне экрана, чтобы "вновь появляться" были слегка смещены в левый или правый в последовательности друг друга, чтобы создать иллюзию туннеля по внешнему виду. Я попытался использовать код, предоставленный мне в ответе, чтобы создать смещение для набора моих стен, но у меня мало ошибок при попытке построить. Сначала я говорил, что локальное объявление 'Left1' скрывает переменную экземпляра, что, как я считаю, связано с тем, что оно уже объявлено как переменная в моей функции? Это появилось дважды... Наряду с этим у меня есть ошибка, которая говорит Присвоение 'UIImageView *__strong' из несовместимого типа 'float'. Как я могу это исправить? Или я что-то не так делаю в другом месте?

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

Я могу ответить на любые вопросы о программе, чтобы было проще оценить ситуацию.

-(void) TunnelMovement{

    CGFloat Left1 = 14;
    for( int i = 0; i < 41; i++ ){
        CGFloat offset = (CGFloat)arc4random_uniform(2*100) - 100;
        Left1 += offset;
        Right1 = Left1 + 14;
        //...
    }
}

Это именно то, что я имею в своем коде после попытки заполнить пробелы из ответа. Не уверен, что я положил все необходимое или что-то еще. Спасибо.

1 ответ

[Я могу дать вам быстрое исправление в этом сообщении об ошибке, но вы пытаетесь бежать, и вы еще не можете идти, вы едва можете ползти. Stack Overflow - это форум по программированию, но это не место для изучения или обучения программированию, у людей не хватит терпения преподавать основы.]

Вы не можете присвоить ценность одной вещи другой, если это совершенно разные вещи. В соответствии:

Right1 = Left1 + 14;

Right1 - это UIImageView, а Left1 - это CGFloat, это совершенно разные вещи. Left1 - просто число, Right1 - сложный объект.

Вы пытаетесь позиционировать UIImageView, поэтому вам нужно присвоить значение Left1 + 14 той части UIImageView, которая будет позиционировать его, и которая также является CGFloat.

Поэтому вам нужно присвоить его чему-то вроде границ, рамки или значения x центра, например,

Right1.center.x = Left1 + 14;

Предупреждение состоит в том, что у вас есть две разные вещи с одним и тем же именем, у вас есть UIImageView с именем Left1, но у вас есть CGFloat, также называемый Left1, вы не должны давать одно и то же имя двум разным вещам - CGFloat Left1 скрывает UIImageView с именем Left1, Вы должны были назвать его Left1X или LeftWallX или похожим, как в ответе на ваш другой вопрос.

Это просто ошибка и предупреждение, вы, вероятно, не готовы перейти к семантике того, как рисовать лабиринт, если вы боретесь с этими двумя. В частности, вам, как минимум, необходимо знать, что представляют собой границы, фрейм, центр, x, y, CGPoint, CGRect, CGSize, чтобы полностью понять, какое значение изменить и как изменение этих значений повлияет на положение UIImageViews.

---- РЕДАКТИРОВАТЬ --- объектное программирование 101

Когда у вас есть объект, такой как UIImageView, это похоже на дом, у дома может быть имя и множество комнат, в каждой из которых есть имя, в каждой комнате есть много вещей. Вы пытаетесь сделать эквивалент замены старого телевизора в одной комнате новым телевизором.

Так что Right1 как дом

Right1.center похож на комнату в доме

Right1.center.x похож на телевизор в комнате под названием center, который находится в доме под названием Right1.

Right1 = Left1 + 14;

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

Эта аналогия слишком глупа?

Другие вопросы по тегам