Defender Chronicles: Legend of the Desert King Уроки iPhone SDK: Cocos2d: Пример со скачущим мячом
Июн 11

При работе с синглетоном Director на Cocos2d программа не реагирует на события касания при наличии в окне объекта “Scene“. Соответственно, реализация “UIApplicationDelegate” не получает уведомления “touchesBegan“.

Исправить эту особенность можно следующим образом:

1) внедрив протокол “TouchEventsDelegate” со следующей спецификацией:

1
2
3
4
5
6
7
8
9
10
11
/**Touch event delegate
* return YES if the event was handled
* return NO if the event was not handled
*/

@protocol TouchEventsDelegate
@optional
- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (BOOL)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
@end

2) связав с синглетоном обработчик событий:

1
[[Director sharedDirector] addEventHandler:(id)touchEventDelegateHandler];

Пример

Так, например, файл ExampleAppDelegate.h можно откорректировать следующим образом:

1
2
3
4
5
#import "cocos2d.h"
@interface ExampleAppDelegate : NSObject {
UIWindow *window;
Scene* mScene1;
}

А в ExampleAppDelegate.m вызывать

1
[[Director sharedDirector] addEventHandler:self];

например, так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
// Инициализация окна
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// cocos2d будет наследовать эти значения
[window setUserInteractionEnabled:YES];
[window setMultipleTouchEnabled:NO];

[[Director sharedDirector] attachInView:window];
[[Director sharedDirector] addEventHandler:self];

// Еще одна инициализация

mScene1=[Scene node];
[[Director sharedDirector] runWithScene: mScene1];
[window makeKeyAndVisible];
}

И реализовав “ccTouchesBegan“:

1
2
3
4
5
-(BOOL)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
// здесь какое-либо действие
return YES;
}

Для обработки других событий касания (”ccTouchesMoved“, “ccTouchesEnded” и пр.) их реализуют по тому же принципу. Как вариант, перенаправьте событие другому классу, реализующему “TouchEventsDelegate“.

Разрыв связей “TouchEventsDelegate” выполняется следующим образом:

1
[[Director sharedDirector] removeEventHandler:(id)touchEventDelegateHandler];

Текст оригинальной статьи на английском языке [здесь]

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

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...

2 Pings to “Уроки iPhone SDK: Cocos2d: Обработчик для событий касания”

  1. Уроки iPhone SDK: Cocos2d для iPhone: работа с переходами | LookApp.ru - обзоры программ и игр для iPhone Says:

    [...] касания. Больше информации по делегированию читаем здесь. Импортируйте два изображения, которые будут [...]

  2. Уроки iPhone SDK: Cocos2d: Пример со скачущим мячом | LookApp.ru - обзоры программ и игр для iPhone Says:

    [...] Home Уроки iPhone SDK: Cocos2d: обработчик для событий касания [...]


Оставьте комментарий