keyDown works but i get beeps

Posted by Oscar on Stack Overflow See other posts from Stack Overflow or by Oscar
Published on 2010-03-14T19:53:35Z Indexed on 2010/03/14 20:05 UTC
Read the original article Hit count: 290

Filed under:
|
|

I just got my keydown method to work. But i get system beep everytime i press key. i have no idea whats wrong. Googled for hours and all people say is that if you have your keyDown method you should also implement the acceptsFirstResponder. did that to and it still doesn't work.

#import <Cocoa/Cocoa.h>
#import "PaddleView.h"
#import "BallView.h"

@interface GameController : NSView {
    PaddleView *leftPaddle;
    PaddleView *rightPaddle;
    BallView * ball;

    CGPoint ballVelocity;

    int gameState;

    int player1Score;
    int player2Score;
}

@property (retain) IBOutlet PaddleView *leftPaddle;
@property (retain) IBOutlet PaddleView *rightPaddle;
@property (retain) IBOutlet BallView *ball;

- (void)reset:(BOOL)newGame;

@end

#import "GameController.h"

#define GameStateRunning 1
#define GameStatePause 2

#define BallSpeedX 0.2
#define BallSpeedY 0.3

#define CompMoveSpeed 15

#define ScoreToWin 5

@implementation GameController

@synthesize leftPaddle, rightPaddle, ball;

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];  
    if(self) {      
        gameState = GameStatePause;
        ballVelocity = CGPointMake(BallSpeedX, BallSpeedY);
        [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(gameLoop) userInfo:nil repeats:YES];

    }
    return self;
}

- (void)gameLoop {
    if(gameState == GameStateRunning) {
        [ball setFrameOrigin:CGPointMake(ball.frame.origin.x + ballVelocity.x, ball.frame.origin.y + ballVelocity.y)];

        if(ball.frame.origin.x + 15 > self.frame.size.width || ball.frame.origin.x < 0) {
            ballVelocity.x =- ballVelocity.x;
        }

        if(ball.frame.origin.y + 35 > self.frame.size.height || ball.frame.origin.y < 0) {
            ballVelocity.y =- ballVelocity.y;
        }
    }

    if(CGRectIntersectsRect(ball.frame, leftPaddle.frame)) {
        if(ball.frame.origin.x > leftPaddle.frame.origin.x) {
            ballVelocity.x =- ballVelocity.x;
        }
    }

    if(CGRectIntersectsRect(ball.frame, rightPaddle.frame)) {
        if(ball.frame.origin.x +15 > rightPaddle.frame.origin.x) {
            ballVelocity.x =- ballVelocity.x;
        }
    }

    if(ball.frame.origin.x <= self.frame.size.width / 2) {
        if(ball.frame.origin.y < leftPaddle.frame.origin.y + 75 && leftPaddle.frame.origin.y > 0) {
            [leftPaddle setFrameOrigin:CGPointMake(leftPaddle.frame.origin.x, leftPaddle.frame.origin.y - CompMoveSpeed)];
        }
        if(ball.frame.origin.y > leftPaddle.frame.origin.y +75 && leftPaddle.frame.origin.y < 700 - leftPaddle.frame.size.height ) {
            [leftPaddle setFrameOrigin:CGPointMake(leftPaddle.frame.origin.x, leftPaddle.frame.origin.y + CompMoveSpeed)];
        }
    }

    if(ball.frame.origin.x <= 0) {
        player2Score++;
        [self reset:(player2Score >= ScoreToWin)];
    }
    if(ball.frame.origin.x + 15 > self.frame.size.width) {
        player1Score++;
        [self reset:(player1Score >= ScoreToWin)];
    }
}

- (void)reset:(BOOL)newGame {
    gameState = GameStatePause;
    [ball setFrameOrigin:CGPointMake((self.frame.size.width + 7.5) / 2, (self.frame.size.height + 7.5)/2)];
    if(newGame) {
        if(player1Score > player2Score) {
            NSLog(@"Player 1 Wins!");
        }
        else {
            NSLog(@"Player 2 Wins!");
        }

        player1Score = 0;
        player2Score = 0;
    }
    else {
        NSLog(@"Press key to serve");
    }

    NSLog(@"Player 1: %d",player1Score);
    NSLog(@"Player 2: %d",player2Score);
}

- (void)moveRightPaddleUp {
    if(rightPaddle.frame.origin.y < 700 - rightPaddle.frame.size.height) {
        [rightPaddle setFrameOrigin:CGPointMake(rightPaddle.frame.origin.x, rightPaddle.frame.origin.y + 20)];
    }
}

- (void)moveRightPaddleDown {
    if(rightPaddle.frame.origin.y > 0) {
        [rightPaddle setFrameOrigin:CGPointMake(rightPaddle.frame.origin.x, rightPaddle.frame.origin.y - 20)];
    }
}

- (BOOL)acceptsFirstResponder {
    return YES;
}

- (void)keyDown:(NSEvent *)theEvent {

    if ([theEvent modifierFlags] & NSNumericPadKeyMask) {
        NSString *theArrow = [theEvent charactersIgnoringModifiers];
        unichar keyChar = 0;
        if ( [theArrow length] == 0 ) {
            return;            // reject dead keys
        }

        if ( [theArrow length] == 1 ) {
            keyChar = [theArrow characterAtIndex:0];

            if ( keyChar == NSLeftArrowFunctionKey ) {
                gameState = GameStateRunning;
            }

            if ( keyChar == NSRightArrowFunctionKey ) {

            }

            if ( keyChar == NSUpArrowFunctionKey ) {
                [self moveRightPaddleUp];
            }

            if ( keyChar == NSDownArrowFunctionKey ) {
                [self moveRightPaddleDown];
            }

            [super keyDown:theEvent];       
        }
    }
    else {
        [super keyDown:theEvent];
    }
}


- (void)drawRect:(NSRect)dirtyRect {

}



- (void)dealloc {
    [ball release];
    [rightPaddle release];
    [leftPaddle release];
    [super dealloc];
}

@end

© Stack Overflow or respective owner

Related posts about cocoa

Related posts about firstresponder