0

クラス (パス) 内に CGRect を作成しています。クラスが長方形を作成していることを確認しました。ここで、タッチ位置が四角形内にあるかどうかを尋ねられたときに、理論的には true を返すメソッドをクラスに組み込みました。問題は、常に false を返すことです。必要に応じて、メソッドがタッチされていることを確認しました。以下の関連コード:

Path.h

#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface Path : CCSprite {
    CGPoint startP;
    CGPoint endP;
    CGRect pathRect;
    CGPoint touchP;
}

-(id)initWithPoints:(CGPoint)sP :(CGPoint)eP;
-(bool)touchWithinBounds:(CGPoint)touch;

@property (nonatomic, assign) CGPoint startP;
@property (nonatomic, assign) CGPoint endP;
@property (nonatomic, assign) CGRect pathRect;
@end

パス.mm

#import "Path.h"

@implementation Path

@synthesize startP;
@synthesize endP;
@synthesize pathRect;

-(id) initWithPoints:(CGPoint)sP :(CGPoint)eP {
    if ((self = [super init])) {
        startP = sP;
        endP = eP;
        pathRect = CGRectMake(startP.x-2, endP.y, 5, 480);
    }
    return self;
}

-(bool)touchWithinBounds:(CGPoint)touch {
    touchP = touch;
    if(CGRectContainsPoint([self pathRect], touch)) {
        return true;
    } else {
        return false;
    }
}

-(void) draw {
    glColor4f(1.0f,1.0f,1.0f,1.0f);
    glLineWidth(5.0f);
    ccDrawLine(startP, endP);
}

-(void) dealloc {
    [super dealloc];
}

@end

メインのゲーム シーンでは、パスを初期化し、可変配列に追加します。

paths = [[NSMutableArray alloc] init];
        Path *path1 = [[[Path alloc] initWithPoints:ccp(winSize.width/3, 0.0) :ccp(winSize.width/3, winSize.height)] autorelease];
        [self addChild:path1 z:0];
        [paths addObject:path1];

そして、ccTouchesBegan で、タッチ位置を touchWithinBounds に送信します。ただし、長方形に触れたときに true を報告する代わりに、常に false を報告します。

UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL: [touch locationInView:touch.view ]];
    for (Path *path in paths) {
        CCLOG(@"%d", [path touchWithinBounds:location]);

ピース間に欠けている何らかの接続がありますか、それとも相互作用がどのように一緒に機能するかを誤解していますか?

ありがとう

4

1 に答える 1

0

理解した。長方形を間違って作成していた点がありました。

于 2011-08-13T02:22:53.637 に答える