Итак, я пытаюсь воссоздать один из этих «виртуальных джойстиков» в некоторых из этих игр для iPhone.И в основном, вот в чем проблема: я могу убедиться, что пользователь касается круга (то есть «виртуального джойстика»), и я также могу перемещать объект (или, по крайней мере, мог перемещать его, потому что с тех пор я запуталсявокруг с этим).Но я не могу дать ему диапазон.
Какого черта я подразумеваю под диапазоном?
Позвольте мне, надеюсь, правильно объяснить, что я имею в виду под диапазоном.Поэтому, когда вы возитесь с настоящим джойстиком на чем-то вроде контроллера Playstation, вы, очевидно, не сможете перетащить его куда-либо, как я мог бы с тем кругом, который я описывал.Таким образом, у него есть диапазон, который находится где-то внутри воображаемого круга, который вы не можете видеть.
Я попробовал следующее:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.view];
if (g == true) {
if (joystick.center.x > 330 && currentPosition.x > 330 || joystick.center.x < 130 && currentPosition.x < 130) {
joystick.center = CGPointMake(joystick.center.x, currentPosition.y);
j = true;
}
if (joystick.center.y > 508 && currentPosition.y > 508 || joystick.center.y < 308 && currentPosition.y < 308) {
joystick.center = CGPointMake(currentPosition.x, joystick.center.y);
j = true;
}
if (j == false) {
joystick.center = CGPointMake(currentPosition.x, currentPosition.y);
}
}
}
Одна заметка, прежде чем я начну объяснять, какова моя логика дляПопытка была, джойстик расположен на экране в (230, 408), и я ничего не сделал с системой координат (поэтому она основана на верхнем левом углу).Теперь позвольте мне объяснить, что это якобы делает:
- Ну, сначала я получаю координаты касания с первыми двумя строками кода в методе.
- Затем
if (g == true)
на самом деле должен делать, если касание находится на круге или нет и устанавливается как touchesBegan
. - Тогда второй if проверяет, больше ли положение x джойстика, чем 330 или меньше, чем 130, что дастрадиус воображаемого диапазона, который является кругом.Также обратите внимание на дополнительные
&& currentPosition.x > 330
и currentPosition.x < 130
, которые предназначены для того, чтобы человек двигал виртуальный джойстик назад к центру, поскольку вы не хотите, чтобы пользователь не мог этого сделать. else if
делает то же самое, что и 3, за исключением направления y. - Для финала
if
использует bool j, чтобы определить, были ли выполнены два других оператора if.
Этот план, очевидно, не работает, иначе я бы не стал просить вас о помощи, так что вы знаете, что я делаю неправильно?