Just a quick one, im trying to increase the score on a game once a ball hits a box. At the minute the score is increasing while the ball is actually moving and not when it hits the box. Im not quite sure where to put this code:
Been trying this code all night not sure what I'm doing wrong. Would I be able to put the increase score code into the bottom code?
Try a method like this...
Code:
- (void)checkcollision {
if (CGRectIntersectsRect(image.frame, Square.frame)) {
//Below here put in the code to start the score and updating the label
score = score +10;
scorelabel.text = [NSString stringWithFormat:@"%i" , score];
}
Replace image and Square with whatever your buttons or images are
Also what I am doing is here is updating a uilabel in the 2nd line
I can get the score to increment by 10 each time, but when the ball drops down it doesnt hit the box it seems to hit like an invisible line as if it was the bottom of the screen for example:
- (void)checkcollision {
if (CGRectIntersectsRect(ball.frame, paddle.frame)) {
//Below here put in the code to start the score and updating the label
NSLog(@"Touched");
score += 10;
scoreLabel.text = [NSString stringWithFormat:@"%d", score];
if (ball.center.y < paddle.center.y) {
ballMovement.y = -ballMovement.y;
float diff=ball.center.x - paddle.center.x;
ballMovement.x=100; // default if it hits the middle
if (diff>100) {
ballMovement.x=10;
}
if (diff<100) {
ballMovement.x=-10;
}
}
}
}
I can get the ball to hit the box fine, lives decrease fine now. Its just the scoring part of it. When the ball hits the box the score should only go up by 1. But it goes up about 50 at a time at the minute which is definately wrong.
Heres what i have so far
Code:
- (void)startPlaying {
if (!lives) {
lives = 3;
score = 0;
}
scoreLabel.text = [NSString stringWithFormat:@"%05d", score];
livesLabel.text = [NSString stringWithFormat:@"%d", lives];
ball.center = CGPointMake(159, 239);
ballMovement = CGPointMake(4,4);
// choose whether the ball moves left to right or right to left
if (arc4random() % 100 < 50)
ballMovement.x = -ballMovement.x;
messageLabel.hidden = YES;
isPlaying = YES;
[self initialiseTimer];
}
- (void)pauseGame {
[theTimer invalidate];
theTimer = nil;
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
[self startPlaying];
ballMovement = CGPointMake(4,4);
[self initialiseTimer];
}
- (void)initialiseTimer {
if (theTimer == nil) {
float theInterval = 1.0f/30.0f;
theTimer = [NSTimer scheduledTimerWithTimeInterval:theInterval target:self
selector:@selector(animateBall:) userInfo:nil repeats:YES];
}
}
- (void)animateBall:(NSTimer *)theTimer {
ball.center = CGPointMake(ball.center.x+ballMovement.x, ball.center.y+ballMovement.y);
BOOL paddleCollision = ball.center.y >= paddle.center.y - 16 &&
ball.center.y <= paddle.center.y + 16 &&
ball.center.x > paddle.center.x - 32 &&
ball.center.x < paddle.center.x + 32;
if(paddleCollision)
ballMovement.y = -ballMovement.y;
if (ball.center.x > 310 || ball.center.x < 16)
ballMovement.x = -ballMovement.x;
if (ball.center.y < 32)
ballMovement.y = -ballMovement.y;
if (ball.center.y > 444) {
[self pauseGame];
isPlaying = NO;
lives--;
livesLabel.text = [NSString stringWithFormat:@"%d", lives];
if (!lives) {
messageLabel.text = @"Game Over";
} else {
messageLabel.text = @"Ball Hit The Floor :(";
}
messageLabel.hidden = NO;
}
[self checkcollision]; ---------I THINK THIS IS THE PROBLEM
}
- (void)checkcollision {
if (CGRectIntersectsRect(ball.frame, paddle.frame)) {
score += 1;
scoreLabel.text = [NSString stringWithFormat:@"%d", score];
/*
if (ball.center.y < paddle.center.y) {
ballMovement.y = -ballMovement.y;
float diff=ball.center.x - paddle.center.x;
ballMovement.x=100; // default if it hits the middle
if (diff>100) {
ballMovement.x=10;
}
if (diff<100) {
ballMovement.x=-10;
}
}
*/
}
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (isPlaying) {
UITouch *touch = [[event allTouches] anyObject];
touchOffset = paddle.center.x -
[touch locationInView:touch.view].x;
} else {
[self startPlaying];
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if (isPlaying) {
UITouch *touch = [[event allTouches] anyObject];
float distanceMoved =([touch locationInView:touch.view].x + touchOffset) -paddle.center.x;
float newX = paddle.center.x + distanceMoved;
if (newX > 30 && newX < 290)
paddle.center = CGPointMake( newX, paddle.center.y );
}
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[scoreLabel release];
[ball release];
[paddle release];
[livesLabel release];
[messageLabel release];
[super dealloc];
}
@end