Как я могу создать смещение на 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;
это все равно что пытаться поменять новый телевизор на дом, вместо того, чтобы пытаться поменять его на телевизор в комнате в доме.
Эта аналогия слишком глупа?