私の前の質問からの教祖のアドバイスに従って、スプライトの透明な領域でのタッチイベントを防ぐために、init メソッドにこのコードを追加しました。
path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, endTouch.x, endTouch.y);
//250(y) is the height of the path, 50(x) is the width
//set your width and height to be the same size as the non-transparent part of your sprite
CGPathAddLineToPoint(path, NULL, 0, 250);
CGPathAddLineToPoint(path, NULL, 50, 0);
CGPathCloseSubpath(path);
次に、タッチ イベントを次のように変更しました。
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if(gameStat == TRUE)
{
UITouch *touch=[touches anyObject];
CGPoint loc=[touch locationInView:[touch view]];
loc=[[CCDirector sharedDirector] convertToGL:loc];
beginTouch = loc;
for(int i = 0; i < [sprArray count]; i++)
{
CCSprite *sprite = (CCSprite *)[sprArray objectAtIndex:i];
if(CGRectContainsPoint([sprite boundingBox], loc))
{
selectedSprite = sprite;
//test the path
loc = [selectedSprite convertToNodeSpace:loc];
if (CGPathContainsPoint(path, NULL, loc, NO) ) {
NSLog(@"inside");
}
else {
NSLog(@"outside");
}
break;
}
}
}}
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint loc1 = [touch previousLocationInView:[touch view]];
CGPoint loc2 = [touch locationInView:[touch view]];
loc2 = [[CCDirector sharedDirector]convertToGL:loc2];
endTouch = location;
int goUp = loc2.y - loc1.y;
if(goUp > 0){
CGPoint locationPath = [selectedSprite convertToNodeSpace:location];
if (CGPathContainsPoint(path, NULL, locationPath, NO) ) {
[selectedSprite setPosition:location];
_spriteTouch = TRUE;
}
}}
さて、これはうまく機能しますが、私の問題は、スプライトが間違った方向に動く傾向があることです. 上向きのタッチスワイプに従うはずですが、どのように上向きにスワイプしても、代わりに右に進み続けます。ここで何が間違っていますか?私を助けてください。
更新:コードを修正する方法を見つけたので、これは既に解決されています。他の誰かが同じ問題に遭遇した場合に備えて、コードを更新しました。