我已经被困了好几天试图控制我的精灵触摸方法。我的目标是让另一个精灵弹出偏移到触摸的精灵。
我目前有一个用于此过程的半个代码,我在其中尝试了许多种代码,请参阅下面的链接,其中没有一个有效。我的问题:
到目前为止我在主要图层中的特定触摸代码:
-(void) registerWithTouchDispatcher{
[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0
swallowsTouches:YES];
}
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
CGPoint location = [touch locationInView: [touch view]];
location = [[CCDirector sharedDirector] convertToGL: location];
//_towersFromClass is an NSMutableArray with CCSprite objects
for(CCSprite *tb in _towersFromClass){
if(CGRectContainsPoint(tb.boundingBox,location)){
NSLog(@"sprite touched at %@", NSStringFromCGPoint(location));
[self towerPositionTapped]
return YES;
}
}
return NO;
}
当我点击任何精灵时,NSLog检查不会显示。
对于towerPositionTapped方法,我不确定如何捕获触摸的位置(或记录触摸的精灵)以便定位新的精灵。
towerPositionTapped.m
-(void)towerPositionTapped{
CCMenuItem *towerOption1 = [CCMenuItemImage itemWithNormalImage:@"tower.png" selectedImage:@"tower.png"];
towerOption1.position = /* place touched sprite location here, with an offset*/;
CCMenu *_towerOptionsMenu = [CCMenu menuWithItems: nil];
_towerOptionsMenu.position = CGPointZero;
[self addChild:_towerOptionsMenu z:5];
}
任何建设性的批评都值得赞赏。谢谢你的时间。
我一直在测试的一些网站:
答案 0 :(得分:0)
如果CCTouchBegin无法正常工作(不在for循环中但总体而言)那么如果您使用EnableTouch,可能需要尝试此行
self.isTouchEnabled = YES;
我使用的是这行而不是registerWithTouchDispatcher。
答案 1 :(得分:0)
我花了几天时间来解决这个问题,尽管我已经设法提出了解决方案。
我基本上使用了与Ray Wenderlich的塔防教程(RWTDTutorial)相同的代码。使用CCTouchesBegan方法。
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
for(UITouch *touch in touches){
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
for(CCSprite *tb in _towersFromClass){
if(CGRectContainsPoint([tb boundingBox],location)){
selectedTowerPosition = tb;
[self towerPositionTapped];
}
}
}
}
我创建了另一个方法,其中包含我在_towersFromClass数组中选择了一个CCSprit之后弹出的CCMenu项目,并在CCTouchesBegan方法的'if'语句下添加了该项。
为了获得菜单的正确位置,我创建了一个CCSprite属性'_selectedTowerPosition'并使其成为'tb'CCSprite。
回到CCMenu方法,我使用ccpAdd代码,如下所示,定位菜单。
CCMenuItem *towerOption1 = [CCMenuItemImage itemWithNormalImage:@"tower.png" selectedImage:@"tower.png" target:self selector:@selector( towerSelectOption)];
towerOption1.position = ccpAdd(_selectedTowerPosition.position,ccp(40,0));
我还给菜单项略微偏移。
这花了我一段时间,但我从这次经历中学到了很多东西。