Лучший способ масштабирования и панорамирования 2D-игры cocos2d для iphone - PullRequest
5 голосов
/ 15 октября 2010

Какой лучший способ реализовать масштабируемую игровую карту с возможностью масштабирования с помощью Cocos2d для iPhone. Это было бы похоже на Mobile Safari, за исключением игровой карты, которая не помещается полностью на экране. Или как то, как это делается с Angry Birds, Cut the веревкой и т. Д.

Это будет не игра с боковой прокруткой, а фиксированная игровая зона, в которую можно увеличивать / уменьшать изображение.

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

Спасибо

Ответы [ 3 ]

6 голосов
/ 24 апреля 2011

Вы абсолютно должны , а не следовать совету Жоао Кахарии, который, кажется, излишне переопределил весь API UIGestureRecognizer сам!

Вы можете просто использовать доступные распознаватели жестов UIKit и прикрепить их кopenGLView sharedDirector, как указано в выбранном ответе по ссылке ниже.Они позволяют обнаруживать панорамирование, пинч, постукивание и т. Д.Вы даже можете использовать UILongPressGestureRecognizer для обнаружения перетаскивания.

cocos2d-iOS - Распознаватели жестов

4 голосов
/ 20 октября 2010

Если вы не собираетесь использовать физику в своей игре, то очень просто вы найдете множество уроков по зуму / панорамированию, просто установите свой масштаб SCALE в коде масштабирования / панорамирования touchesMoved.

но если вы предпочитаете Angry Bird, то вы можете использовать физический движок Box2d / Chipmunk (поставляется с cocos2d), но для построения физического мира, такого как Angry birds, вам придется либо написать свой собственный редактор уровней, либо Вы можете использовать LevelSVG (разработчики Cocos2d), чтобы визуально создать мир в редакторе SVG и проанализировать его в BOX2d.

Что касается масштабирования / панорамирования с физическими телами в вашем мире, оно будет работать, пока ваш физический мир находится в вашем СЛОЕ, который вы пытаетесь масштабировать.

но я рекомендую перезаписать функцию VISIT вашего слоя, которую вы хотите масштабировать, и обрабатывать масштабирование либо glOrthof, либо glScalef

1 голос
/ 19 ноября 2010

, но я рекомендую перезаписать функцию VISIT вашего слоя, которую вы хотите масштабировать, и обрабатывать масштабирование с помощью glOrthof или glScalef

Я бы не перезаписывал функцию посещения.просто добавьте свой слой в диспетчер касаний:

[[CCTouchDispatcher sharedDispatcher] addStandardDelegate:self priority:0];

и реализуйте функции делегата:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

внутри этих функций, если вы заметили, что пользователь выполняет панорамирование / масштабирование, просто обновитесвойства положения / масштаба сцены.

Чтобы узнать, выполняет ли пользователь панорамирование или масштабирование, проверьте этот вспомогательный класс InputController здесь: https://github.com/caxaria/LoopingMenu

Надеюсь, это поможет,

...