开发者

ccTouchesBegan vs ccTouchBegan - Touch Detection & SIGABRT crash

开发者 https://www.devze.com 2023-04-13 01:00 出处:网络
I\'m currently doing an application where I\'m trying to detect touch-positions of the user. I changed from ccTouchBegan to ccTouchesBegan in the process of implementing the \"detect touch-position\"

I'm currently doing an application where I'm trying to detect touch-positions of the user.

I changed from ccTouchBegan to ccTouchesBegan in the process of implementing the "detect touch-position" function.

But I can't get it to work. I changed from ccTouchBegan to ccTouchesBegan:

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

instead of using:

 -(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{

When i did this the whole thing crashes when I click the screen. Generating a SIGABRT error higlighting:

#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
NSAssert(NO, @"Layer#ccTouchBegan override me");
return YES;
}
#endif
@end

So my questions are:

Why do you think it crashes?

What's the difference between ccTouchBegan & ccTouchesBegan? Multi touch abilities?

For further help, this is my code:

-(id) init
    {
    if( (self=[super init])) {

        [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
        self.isTouchEnabled = YES;

        // Set up background
        background = [CCSprite spriteWithFile:@"Image.png"];
        background.scaleX = 1;
        background.scaleY = 1;
        background.position = ccp(0,0);
        [self addChild:background];


        [[CCTouchDispatcher sharedDispatcher]addTargetedDelegate:self
                                                        priority:0
                                                 swallowsTouches:YES];

        // Preload sound effect
        soundFile = [Simp开发者_StackOverflow中文版leAudioEngine sharedEngine];
        if (soundFile != nil) {
            [soundFile preloadBackgroundMusic:@"sound.wav"];
        }


    }
    return self;
    }


    -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    UITouch *touch = [touches anyObject];

    NSLog(@"ccTouchesBegan");
    // Sets the sound variable to YES
    ifOne = YES;

    prevPos = [touch locationInView:[touch self]];
    prevPos = [[CCDirector sharedDirector] convertToGL:[touch locationInView:touch.self]];

    [self schedule:@selector(timerUpdate:) interval:0.1];
    //return YES; 
    }


It's a nice feature in cocos2d which lets you swallow touches in cases that you want to handle only a single touch event.

Try adding this function to your class:

- (void) registerWithTouchDispatcher {
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:INT_MIN+1 swallowsTouches:YES];
}


  • ccTouchesBegan happens the second you tap the screen
  • ccTouchesEnded happens the second you let go after tapping on the screen

and instead of

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
instead of using:
 -(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{

try using

-(void)ccTouchesBegan:(UITouch *)...

or

-(void)ccTouchesBegan:(NSSet *)...

or

-(BOOL)ccTouchesBegan:(NSSet *)...

your problem may just be invalid data types or some crap like that, my advice is just try switching the types of touches around.

I would give more info but you didn't provide alot of information to work with, so this is the best I can do.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号