Чтобы ответить на ваш вопрос: с Cocos2D ваша сцена создаст спрайтов. Вы можете получить текущую сцену бега и отправить ей сообщение (например, «Я застрелен»). Это можно сделать через директора.
[[CCDirector sharedDirector] runningScene]; // returns a pointer to the running scene
[[[CCDirector sharedDirector] runningScene] someoneShotMe: self]; // will message the scene that you're shot.
В качестве альтернативы, если ваша сцена не управляет вещами, задайте объект, о котором вы хотите быть информированным как делегат, при создании «врага».
Enemy * enemy1 = [[Enemy alloc] init];
[enemy1 setDelegate: self];
// and then from your enemy object, you call a message on the delegate
[self->delegate someoneShotMe: self];
Я думаю, что вы слишком усложняете это, потому что вы там не используете MVC.
Вы не должны создавать подклассы спрайтов, чтобы дать им больше функциональности, чем "просмотр".
Свойства, такие как probabilityToHitPlayer
, не влияют непосредственно на представление, поэтому не должны храниться в спрайте.
Создайте новый класс, например Enemy
(подкласс NSObject
), который содержит спрайт и другие свойства, такие как probabilityToHitPlayer
Затем враг может обрабатывать логику (это контроллер), в то время как Sprite обрабатывает видимые части.
Кроме того, использовать пункты меню, потому что они имеют сенсорное распознавание? Не красиво Вместо этого посмотрите в CCTargetedTouchDelegate.