Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
MargoK
0 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 7
#1

Относится ли точка прикосновения к одному из элементов игрового поля? - Программирование iOS

06.05.2012, 13:38. Просмотров 1252. Ответов 7
Метки нет (Все метки)

Cocos2D, Objectiv-C 2.0
Дело такое: у меня есть игровое поле размером 6х6, начинается с (10,100), заканчивается (310, 400), соответственно каждый элемент размером 50х50 поинтов. Мне нужно определить относится ли точка прикосновения к какому-либо элементу этого поля, если да, то к какому.
Пробовала сделать так:
Объявила и инициализировала 36 переменных типа CGRect (с помощью метода CGRectMake), потом была мысль засунуть их в массив, но если это делать с помощью метода addObject, то это будет массив объектов. Соответственно, как объекты я их извлеку в переменную типа id или value, а как мне извлечь то, что внутри этих объектов? А определяю на принадлежность с помощью метода CGRectContaintsPoint.
Хотя этот способ сам по себе "не профессиональный"... на мой взгляд. Может кто подскажет способ лучше? Как узнать дотронулся пользователь до 2 элемента 3 ряда или до какого либо ещё? По идеи, нужно узнать до какого элемента дотронулся пользователь и "положить" туда спрайт.
Объявлять 36 спрайтов с заданными координатами и поверх них класть спрайты? Похоже этот способ будет лучше...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2012, 13:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Относится ли точка прикосновения к одному из элементов игрового поля? (Программирование iOS):

Точка прикосновения внутри Списка Vector2 - C#
Доброе время суток всем! Имеется список Vector2 и вот как выглядит этот список на экране. При прикосновении к экрану(Vector2...

Определить, относится ли заданная точка к закрашенной области - Lazarus
Ввести координаты точек. Определить, относится ли точка к закрашенной области.

Даны отрезки [a, b] и [c, d] и точка A с координатой х. Определить, принадлежит ли данная точка одному из этих отрезков, обоим или лежит вне их - C++
Даны отрезки и и точка A с координатой х. Определить, принадлежит ли данная точка одному из этих отрезков, обоим или лежит вне их

Определите к какой четверти относится точка, заданая координатами - Pascal ABC
9. Определите до какой четверти относиться точка, задана координатами. Координаты вводяться с клавиатуры, в результате чего выводиться...

Генерирование игрового поля - C (СИ)
Здравствуйте, друзья! Я пишу программу, в которой нужно генерировать игровое поле размером 10 строк 4 столбца, ячейкой поля является один...

Создание игрового поля - Visual Basic
Подскажите, пожалуйста, ответ на такой вопрос: Я часто видел, что в простеньких 2d-играх, написанных на VB6, да и на других языках...

7
zulkis
684 / 611 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
06.05.2012, 15:56 #2
Стоп, зачем Вам вообще CGRect? Используйте CCSprite(конечно же с указанием их rect) и CCArray для их хранения.
После "отлова" нажатия в
Objective-C
1
-ccTouchesBegan:withEvent:
Вы должны преобразовать координату
Objective-C
1
convertCoordinate:
в CCDirector'e,а затем пробежаться по всем CCSprite в Вашем CCArray и сделать
Objective-C
1
CGRectContainsPoint()
для каждого спрайта и вашей точки.

PS. Немного непонял про
По идеи, нужно узнать до какого элемента дотронулся пользователь и "положить" туда спрайт
1
MargoK
0 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 7
07.05.2012, 18:30  [ТС] #3
Цитата Сообщение от zulkis Посмотреть сообщение
По идеи, нужно узнать до какого элемента дотронулся пользователь и "положить" туда спрайт
Ну... как бы это сказать... Должно выглядеть так: появляется шарик (красного, синего, жёлтого или т.п. цвета) и его игрок должен положить на поле 6х6 (соответственно шарик должен двигаться за пальцем) и, когда в ряд выстроятся 3 шарика одного цвета, они должны исчезнуть. Получается спрайт на спрайте, там вроде с параметром z можно похимичить. Но у меня всё равно не очень в голове укладывается... с программной точки зрения.
0
zulkis
684 / 611 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
07.05.2012, 19:30 #4
Как придумаете, так и будет - это насчет реализации с программной точки зрения.
А насчет реализации - ну при тыки - определите, что вы тыкнули на фигуру, которую нужно двигать, а затем в ccTouchesMoved двигаете этот спрайт за пальцем.
0
MargoK
0 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 7
11.05.2012, 18:26  [ТС] #5
Собственно, из той же оперы.
__________________
|30|31|32|33|34|35|
|24|25|26|27|28|29|
|18|19|20|21|22|23|
|12|13|14|15|16|17|
|06|07|08|09|10|11|
|00|01|02|03|04|05|
_____________________
|area_1|area_2|area_3|

Мне нужно из area_3 взять спрайт и положить в одну из ячеек поля 00-35. Это у меня получилось. Так можно N спрайтов положить на одну ячейку поля - меня это не устраивает. Мне нужно чтобы только 1 спрайт можно было положить на одну ячейку. Нужно сделать проверку. Вот с этим затруднения.
Как вариант, думала создать массив, который будет хранить спрайты, которые "положили" на ячейки, чтобы индекс спрайта совпадал с индексом ячейки на которой он лежит. И сверять. Но что-то я не могу найти способ засунуть спрайт по индексу. Получить могу: [array objectAtIndex: i], а засунуть по индексу? Что-то вроде такого: [array oddObject: movedSprite atIndex: i] работать не будет. С dictionary то же самое. В общем, возможно логика храмает и можно сделать по-другому (как?) или я чего-то не могу найти.
В последствии мне нужно будет сверять, допустим, находится ли в 14,15 и 21 ячейки спрайты одного цвета, если да, то удалить их. Поэтому рассматривала массивы.
0
zulkis
684 / 611 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.05.2012, 18:56 #6
Совсем простой вариант - массив состояний "занятости" ячеек:
C
1
BOOL *pData = (BOOL*) calloc (36/*Required number*/,sizeof(BOOL));
затем для нужного элемента, который поставлен на нужное место с индексом index:
C
1
pData[index] = TRUE;
Дальше проверка - дело техники.
Ну и не забудьте в конце:
C
1
free(pData);
PS. Можете конечно CCSprite в NSDictionary сетить по ключу номера ячейки. Каждому свое
1
MargoK
0 / 0 / 0
Регистрация: 28.04.2012
Сообщений: 7
11.05.2012, 20:28  [ТС] #7
zulkis,
Спасибо, это мне помогло. А как же это:
Цитата Сообщение от MargoK Посмотреть сообщение
В последствии мне нужно будет сверять, допустим, находится ли в 14,15 и 21 ячейки спрайты одного цвета, если да, то удалить их. Поэтому рассматривала массивы.
У меня спрайты генерятся рандомным цветом радуги и мне нужно определить находятся ли рядом 3 спрайта одного цвета (там картинки цветные).
0
pasha_ost
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 3
07.03.2013, 04:12 #8
нужен толковый программер пишущий на objectiv-c из минска!! если есть такой свяжитесь по контакту Остапченко Паша или по тел 8-044-5884110
0
07.03.2013, 04:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2013, 04:12
Привет! Вот еще темы с ответами:

Автоматическое построение игрового поля - C++
есть такой код: #include <iostream> #include <conio.h> int main(){ //переменные int move = 1; char f ={}; unsigned...

.NET 4.x Судоку, сохранение игрового поля - C#
доброго времени суток.Прошу помочь с игровым приложением судоку. программа рабочая .единственная проблема ума не приложу как сделать кнопку...

Составить алгоритм обхода игрового поля - C++
Вобщем, такая тема: Дан двумерный массив чисел 12х12, который содержит числа от 0 до 5. 0 - дырка 1 - мое местоположение( при...

Генерация игрового поля указанного размера - C++/CLI WinForms
Есть проект в VC 2010, Visual C++, Windows Forms. Планируется создать Морской бой, но проблему не хочется решать тупым созданием 200...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru