views:

298

answers:

2

Hi, i'm trying to implement this code for accelerometer use but i'm getting a compiler error: stray /342, stray/200 ... for size,currentTouch, position object's and so on ... why?

code:

//GravityObj.h

@interface GravityObj : UIView  {
        CGPoint position;
        CGSize size;
    CGPoint velocity;
        NSTimer *objTimer;
        NSString *pngName;
        CGFloat bounce;
    CGFloat gravity;
        CGPoint acceleratedGravity;
        CGPoint lastTouch;
    CGPoint currentTouch;
        BOOL dragging;
}

@property CGPoint position;
@property CGSize size;
@property CGPoint velocity;
@property(nonatomic,retain)NSString *pngName;
@property(nonatomic,retain)NSTimer *objTimer;
@property CGFloat bounce;
@property CGFloat gravity;
@property CGPoint acceleratedGravity;
@property CGPoint lastTouch;
@property CGPoint currentTouch;
@property BOOL dragging;

- (id)initWithPNG:(NSString*)imageName position:(CGPoint)p size:(CGSize)s;
- (void)update;
- (void)onTimer;

@end

//GravityObj.m

#import "GravityObj.h"


@implementation GravityObj

@synthesize position, size;
@synthesize objTimer;
@synthesize velocity;
@synthesize pngName;
@synthesize bounce;
@synthesize gravity, acceleratedGravity;
@synthesize lastTouch, currentTouch;
@synthesize dragging;

- (id)initWithPNG:(NSString*)imageName position:(CGPoint)p size:(CGSize)s {
        if (self = [super initWithFrame:CGRectMake(p.x, p.y, s.width, s.height)]) {
                [self setPngName:imageName];
                [self setPosition:p];
                [self setSize:s];
                [self setBackgroundColor:[UIColor clearColor]];

                // Set default gravity and bounce
                [self setBounce:-0.9f];
        [self setGravity:0.5f];
                [self setAcceleratedGravity:CGPointMake(0.0, gravity)];
                [self setDragging:NO];

                UIImageView *prezzie = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, s.width, s.height)];
                prezzie.image = [UIImage imageNamed:imageName];

                [self addSubview:prezzie];
                [prezzie release];

                [[UIAccelerometer sharedAccelerometer] setDelegate:self];
        }
        return self;
}

- (void)update {
        [self setNeedsDisplay];

        if(dragging) return;

        velocity.x += acceleratedGravity.x;
    velocity.y += acceleratedGravity.y;
    position.x += velocity.x;
    position.y += velocity.y;

    if(position.x + size.width >= 320.0) {
        position.x = 320.0 – size.width;
        velocity.x *= bounce;
    }
    else if(position.x <= 0.0) {
        velocity.x *= bounce;
    }

    if(position.y + size.height >= 416.0) {
        position.y = 416.0 – size.height;
        velocity.y *= bounce;
    }
    else if(position.y <= 0.0) {
        velocity.y *= bounce;
    }
        self.frame = CGRectMake(position.x, position.y, size.width, size.height);
}

- (void)onTimer {
        [self update];
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
}
/* EVENTS */

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    acceleratedGravity.x = acceleration.x * gravity;
    acceleratedGravity.y = -acceleration.y * gravity;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        // First, lets check to make sure the timer has been initiated
        if (objTimer == nil) {
                objTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
        }

    UITouch *touch = [touches anyObject];
        [self setCurrentTouch:[touch locationInView:self]];
    CGFloat dx = currentTouch.x – position.x;
    CGFloat dy = currentTouch.y – position.y;
    CGFloat dist = sqrt(dx * dx + dy * dy);
    if(dist < size.width) {
        [self setVelocity:CGPointMake(0.0, 0.0)];
                [self setDragging:YES];
    }
        [self setLastTouch:currentTouch];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    [self setCurrentTouch:[touch locationInView:self]];
        [self setDragging:YES];
        [self setVelocity:CGPointMake(currentTouch.x – lastTouch.x, currentTouch.y – lastTouch.y)];
        [self setLastTouch:currentTouch];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
        [self setDragging:NO];
}

- (void)dealloc {
        [objTimer release], objTimer = nil;
        [pngName release], pngName = nil;
        [super dealloc];
}

@end
+2  A: 

It looks like the minus signs in some of your lines were Unicode characters that display as minuses and aren't. I copied your code into Xcode and got the same error. I then retyped each line that had the error and it worked.

Here's the fixed version (.m file only):

@implementation GravityObj

@synthesize position, size;
@synthesize objTimer;
@synthesize velocity;
@synthesize pngName;
@synthesize bounce;
@synthesize gravity, acceleratedGravity;
@synthesize lastTouch, currentTouch;
@synthesize dragging;

- (id)initWithPNG:(NSString*)imageName position:(CGPoint)p size:(CGSize)s {
    if (self = [super initWithFrame:CGRectMake(p.x, p.y, s.width, s.height)]) {
     [self setPngName:imageName];
     [self setPosition:p];
     [self setSize:s];
     [self setBackgroundColor:[UIColor clearColor]];

     // Set default gravity and bounce
     [self setBounce:-0.9f];
        [self setGravity:0.5f];
     [self setAcceleratedGravity:CGPointMake(0.0, gravity)];
     [self setDragging:NO];

     UIImageView *prezzie = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, s.width, s.height)];
     prezzie.image = [UIImage imageNamed:imageName];

     [self addSubview:prezzie];
     [prezzie release];

     [[UIAccelerometer sharedAccelerometer] setDelegate:self];
    }
    return self;
}

- (void)update {
    [self setNeedsDisplay];

    if(dragging) return;

    velocity.x += acceleratedGravity.x;
    velocity.y += acceleratedGravity.y;
    position.x += velocity.x;
    position.y += velocity.y;

    if(position.x + size.width >= 320.0) {
     position.x = 320.0 - size.width;
        velocity.x *= bounce;
    }
    else if(position.x <= 0.0) {
        velocity.x *= bounce;
    }

    if(position.y + size.height >= 416.0) {
     position.y = 416.0 - size.height;
        velocity.y *= bounce;
    }
    else if(position.y <= 0.0) {
        velocity.y *= bounce;
    }
    self.frame = CGRectMake(position.x, position.y, size.width, size.height);
}

- (void)onTimer {
    [self update];
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
}
/* EVENTS */

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    acceleratedGravity.x = acceleration.x * gravity;
    acceleratedGravity.y = -acceleration.y * gravity;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // First, lets check to make sure the timer has been initiated
    if (objTimer == nil) {
     objTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
    }

    UITouch *touch = [touches anyObject];
    [self setCurrentTouch:[touch locationInView:self]];
    CGFloat dx = currentTouch.x - position.x;
    CGFloat dy = currentTouch.y - position.y;
    CGFloat dist = sqrt(dx * dx + dy * dy);
    if(dist < size.width) {
        [self setVelocity:CGPointMake(0.0, 0.0)];
     [self setDragging:YES];
    }
    [self setLastTouch:currentTouch];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    [self setCurrentTouch:[touch locationInView:self]];
    [self setDragging:YES];
    [self setVelocity:CGPointMake(currentTouch.x - lastTouch.x, currentTouch.y - lastTouch.y)];
    [self setLastTouch:currentTouch];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [self setDragging:NO];
}

- (void)dealloc {
    [objTimer release], objTimer = nil;
    [pngName release], pngName = nil;
    [super dealloc];
}

@end

If you get that error again, I found that viewing the file in FileMerge can help; it doesn't seem to know Unicode as well as Xcode.

CajunLuke
Thanks it works!
omri
A: 

You can pick up stray /342 /200 from copy/paste usually from pdf's sometimes html. Paste to a terminal and copy back out for a quick fix.

t011phr33