Изменение ориентации Cocos 2d на портретную - PullRequest
1 голос
/ 27 января 2012

У меня есть два вида, один из которых - в альбомной, а другой - в портретной. Ориентация по умолчанию - альбомная. Когда я меняю вид с пейзажа на портрет, используя

[[CCDirector sharedDirector] setDeviceOrientation:CCDeviceOrientationLandscapeRight];

Пока графика вращается отлично, у меня проблемы с сенсорным экраном. Может кто-нибудь, пожалуйста, помогите мне с этим вопросом?

Ответы [ 4 ]

3 голосов
/ 27 января 2012

Используете ли вы последний шаблон cocos2d?Причина, по которой [[CCDirector sharedDirector] setDeviceOrientation:CCDeviceOrientationLandscapeRight]; не сработает, заключается в том, что по умолчанию UIKit (RootViewController) позволяет обрабатывать поворот, читая комментарии в строке 77 - 84. Что делает ваш код, это изменяет ориентацию CCDirector, а не RootViewControllerследовательно, ваше местоположение прикосновения не переведено должным образом.

Вы смешиваете стандартный UIKit от Apple с cocos2d?Если у вас нет одного очень простого решения, просто перейдите на GameConfig.h

, измените эти строки

#if defined(__ARM_NEON__) || TARGET_IPHONE_SIMULATOR
#define GAME_AUTOROTATION kGameAutorotationUIViewController

на

#if defined(__ARM_NEON__) || TARGET_IPHONE_SIMULATOR
#define GAME_AUTOROTATION kGameAutorotationCCDirector

PS Изменение автоповоротаОбработчик может / не может работать в зависимости от того, как вы настроили свой проект.

1 голос
/ 12 мая 2012

Это просто и очень просто для достижения правильной ориентации.Вам просто нужно отредактировать реализацию RootViewController: просто измените его метод -willChangeToInterfaceOrientation ..., чтобы он возвращал «YES» для ориентаций, которые вам нужны в вашем приложении.Например, измените возвращаемое значение для всех возможностей на

return ( (interfaceOrientation == UIInterfaceOrientationPortrait) ||    
(interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) );

. После этого ваше приложение будет вращаться только в том случае, если оно находится в альбомной ориентации в портретной ориентации.И ваше приложение (в данном случае) поддерживает только книжную ориентацию.Для правильной автоматической настройки приложения в ответ на переход с портретного на портретное-вертикальное-расположение (и наоборот) просто отредактируйте следующие строки, чтобы настроить экземпляр CCDirector с подходящими значениями:

if( interfaceOrientation == UIInterfaceOrientationPortrait ) {
    [[CCDirector sharedDirector] setDeviceOrientation:     
kCCDeviceOrientationPortraitUpsideDown];
} else if( interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    [[CCDirector sharedDirector] setDeviceOrientation: 
kCCDeviceOrientationPortrait];
}

Все, что упоминается в комментариях, сопровождающихреализация метода по умолчанию из вашего шаблона проекта!

И не забудьте отредактировать info.plist вашего приложения, чтобы он содержал подходящие значения для ключей -InitialInterfaceOriatation -SupportedInterfaceOrientations

Обычно вам не нужноизменить что-либо в вашем классе делегатов приложений или в GameConfig.h.

И ... вот, пожалуйста!

0 голосов
/ 19 июня 2017

[startUpOptions setObject: CCScreenOrientationPortrait forKey: CCSetupScreenOrientation];

Я только что добавил приведенный выше код в файл appdelegate.m в приложении функции (BOOL): (UIApplication *) приложение didFinishLaunchingWithOptions: (NSDictionary *) launchOptions, и это сработало

0 голосов
/ 07 февраля 2012

Это было так просто, Решил мою проблему, просто преобразовав точки касания в GL

CGPoint convertedLocation = [[CCDirector sharedDirector]convertToGL:point];
...