私が遭遇する問題は、CCLabelBMFont ラベルの位置とそのラベルを構成する CCSprite 文字の 1 つが異なるように見えるため、タッチ イベントを管理できないことです...
この問題をさらに詳しくテストするために、私はこれを試しました:
-(id)init
{
if ((self = [super init])
{
CCLabelBMFont *label = [CCLabelBMFont labelWithString:"welcome" fntFile:@"Arial.fnt"];
CGSize size = [[CCDirector sharedDirector] winSize];
label.position = ccp(size.width/2, size.height/2);
[self addChild: self.label];
self.isTouchEnabled = YES;
}
return self;
}
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInView:[touch view]];
touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
NSLog(@"point touched: x:%f, y:%f", touchLocation.x, touchLocation.y);
for (CCSprite *character in [label children])
{
if (CGRectContainsPoint([character boundingBox], touchLocation))
{
[character setColor:ccRED];
}
}
}
そして、私が触れたラベルの文字が何であれ、本来のように赤くなりませんでした.
そして、CCLabelBMFont を構成するスプライトの位置とラベル自体が異なると思う理由は、次のように挿入した場合です。
NSLog(@"character position: x:%f y: %f", character.position.x, character.position.y);
ccTouchesBegan タッチ処理では、スプライトの位置が画面の左下隅にあるようにリストされています。
だから、単純なものが欠けているかもしれませんが、スプライトの位置をラベルと同じ場所に変換して、ラベルの文字のタッチを認識できるようにする方法はありますか?
前もって感謝します。