Note that there are some explanatory texts on larger screens.

plurals
  1. POiOS "View Controller"
    primarykey
    data
    text
    <p>I try to make a game but I have a "warning" that says: "IVBrickerViewController may not respond to -processCollision. This is the code:</p> <pre><code>#import "IVBrickerViewController.h" @implementation IVBrickerViewController @synthesize scoreLabel; @synthesize ball; @synthesize paddle; @synthesize livesLabel; @synthesize messageLabel; /* // The designated initializer. Override to perform setup that is required before the view is loaded. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } */ /* // Implement loadView to create a view hierarchy programmatically, without using a nib. - (void)loadView { } */ // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. -(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)accel { float newX = paddle.center.x + (accel.x *12); if(newX &gt; 30 &amp;&amp; newX &lt;290) paddle.center = CGPointMake(newX, paddle.center.y); } - (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 &gt; 30 &amp;&amp; newX &lt; 290) paddle.center = CGPointMake( newX, paddle.center.y ); if (newX &gt; 290) paddle.center = CGPointMake( 290, paddle.center.y ); if (newX &lt; 30) paddle.center = CGPointMake( 30, paddle.center.y ); } } - (void)viewDidLoad { [super viewDidLoad]; [self initializeBricks]; [self startPlaying]; } - (void)initializeBricks { brickTypes[0] = @"bricktype1.png"; brickTypes[1] = @"bricktype2.png"; brickTypes[2] = @"bricktype3.png"; brickTypes[3] = @"bricktype4.png"; int count = 0; for (int y = 0; y &lt; BRICKS_HEIGHT; y++) { for (int x = 0; x &lt; BRICKS_WIDTH; x++) { UIImage *image = [UIImage imageNamed: brickTypes[count++ % 4]]; bricks[x][y] = [[[UIImageView alloc] initWithImage:image] autorelease]; CGRect newFrame = bricks[x][y].frame; newFrame.origin = CGPointMake(x * 64, (y * 40) + 100); bricks[x][y].frame = newFrame; [self.view addSubview:bricks[x][y]]; } } } -(void)startPlaying { if (!lives) { lives = 3; score = 0; } UIAccelerometer *theAccel = [UIAccelerometer sharedAccelerometer]; theAccel.updateInterval = 1.0f / 30.0f; theAccel.delegate = self; ballMovement = CGPointMake(4, 4); [self initializeTimer]; 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 or right to left if (arc4random() % 100 &lt; 50) ballMovement.x = -ballMovement.x; messageLabel.hidden = YES; isPlaying = YES; [self initializeTimer]; } -(void)pauseGame { [theTimer invalidate]; theTimer = nil; } -(void)initializeTimer { if (theTimer == nil) { float theInterval = 1.0f/30.0f; //I've renamed animateBall: to gamelogic theTimer = [NSTimer scheduledTimerWithTimeInterval:theInterval target:self selector:@selector(gameLogic) userInfo:nil repeats:YES]; } } -(void)gameLogic { ball.center = CGPointMake(ball.center.x+ballMovement.x, ball.center.y+ballMovement.y); BOOL paddleCollision = ball.center.y &gt;= paddle.center.y - 16 &amp;&amp; ball.center.y &lt;= paddle.center.y + 16 &amp;&amp; ball.center.x &gt; paddle.center.x - 32 &amp;&amp; ball.center.x &lt; paddle.center.x + 32; if(paddleCollision) { ballMovement.y = -ballMovement.y; BOOL there_are_solid_bricks = NO; for (int y = 0; y &lt; BRICKS_HEIGHT; y++) { for (int x = 0; x &lt; BRICKS_WIDTH; x++) { if (1.0 == bricks[x][y].alpha) { there_are_solid_bricks = YES; if ( CGRectIntersectsRect(ball.frame, bricks[x][y].frame) ) { [***self processCollision:bricks[x][y]];*** } } else { if (bricks[x][y].alpha &gt; 0) bricks[x][y].alpha -= 0.1; } } } if (!there_are_solid_bricks) { [theTimer invalidate]; isPlaying = NO; lives = 0; messageLabel.text = @"You Win!"; messageLabel.hidden = NO; } if (ball.center.y &gt;= paddle.center.y - 16 &amp;&amp; ballMovement.y &lt; 0) { ball.center = CGPointMake(ball.center.x, paddle.center.y - 16); } else if (ball.center.y &lt;= paddle.center.y + 16 &amp;&amp; ballMovement.y &gt; 0) { ball.center = CGPointMake(ball.center.x, paddle.center.y + 16); } else if (ball.center.x &gt;= paddle.center.x - 32 &amp;&amp; ballMovement.x &lt; 0) { ball.center = CGPointMake(paddle.center.x - 32, ball.center.y); } else if (ball.center.x &lt;= paddle.center.x + 32 &amp;&amp; ballMovement.x &gt; 0) { ball.center = CGPointMake(paddle.center.x + 32, ball.center.y); } } if(ball.center.x &gt; 300 || ball.center.x &lt; 20) ballMovement.x = -ballMovement.x; if (ball.center.y &lt; 32) ballMovement.y = -ballMovement.y; if (ball.center.y &gt; 444) { [self pauseGame]; isPlaying = NO; lives--; livesLabel.text = [NSString stringWithFormat:@"%d", lives]; if (!lives) { messageLabel.text = @"Game Over"; } else { messageLabel.text = @"Ball Out of Bounds"; } messageLabel.hidden = NO; } if(ball.center.y &gt; 444 || ball.center.y &lt; 40) ballMovement.y = -ballMovement.y; } - (void)processCollision:(UIImageView *)brick { score += 10; scoreLabel.text = [NSString stringWithFormat:@"%d", score]; if (ballMovement.x &gt; 0 &amp;&amp; brick.frame.origin.x - ball.center.x &lt;= 4) ballMovement.x = -ballMovement.x; else if (ballMovement.x &lt; 0 &amp;&amp; ball.center.x - (brick.frame.origin.x + brick.frame.size.width) &lt;= 4) ballMovement.x = -ballMovement.x; if (ballMovement.y &gt; 0 &amp;&amp; brick.frame.origin.y - ball.center.y &lt;= 4) ballMovement.y = -ballMovement.y; else if (ballMovement.y &lt; 0 &amp;&amp; ball.center.y - (brick.frame.origin.y + brick.frame.size.height) &lt;= 4) ballMovement.y = -ballMovement.y; brick.alpha -= 0.1; } /* // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } */ - (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 </code></pre> <p>I HAVE TWO WARNINGS HERE AT THE <code>@END</code>: </p> <ol> <li>{Incomplete implementation of class 'IVBrickerViewController'}.</li> <li>{Method definition for'-animateBall:'not found}.</li> </ol> <p>I had changed the .h file from: "<code>-(void)animateBall:(NSTimer *)theTimer;</code>" to: "<code>-(void)gameLogic:(NSTimer *)theTimer;</code>" but i get the same warning: "<code>Method definition for'-gameLogic:' not found</code>"</p> <p>I would like to thank those who have tried to help me.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload