スプライト タッチ メソッドを制御下に置こうとして、何日も困惑していました。私の目的は、タッチされたスプライトにオフセットされた別のスプライトをポップアップさせることです。
私は現在、このプロセスのための不完全なコードを持っています。そこでは、さまざまな種類のコードを試しました。以下のリンクを参照してください。どれも機能していません。私の質問:
- タッチが画面上のスプライトにヒットしたら、CCTouchBegan にメソッド towerPositionTapped を実行させます (CCTouchBegan の NSLog も機能していません)。
- タッチされたスプライトの位置を取得して、towerPositionTapped メソッドで使用できるようにする方法を確認してください。
これまでのメインレイヤーでの私のタッチ固有のコード:
-(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];
}
建設的な批判は大歓迎です。お時間をいただきありがとうございます。
私がテストしているいくつかのサイト: