19
19
20
20
@implementation GameScene
21
21
{
22
- Paddle *_paddleA ;
23
- Paddle *_paddleB ;
22
+ Paddle *_paddleLeft ;
23
+ Paddle *_paddleRight ;
24
24
CCSprite *_ball;
25
25
CGSize _gameSize;
26
26
CGPoint _ballVector;
@@ -35,11 +35,11 @@ - (instancetype)init
35
35
_gameSize = [CCDirector sharedDirector ].viewSize ;
36
36
37
37
// create paddles
38
- _paddleA = [Paddle paddleWithSide: PaddleSideLeft];
39
- [self addChild: _paddleA ];
38
+ _paddleLeft = [Paddle paddleWithSide: PaddleSideLeft];
39
+ [self addChild: _paddleLeft ];
40
40
41
- _paddleB = [Paddle paddleWithSide: PaddleSideRight];
42
- [self addChild: _paddleB ];
41
+ _paddleRight = [Paddle paddleWithSide: PaddleSideRight];
42
+ [self addChild: _paddleRight ];
43
43
44
44
_ball = [CCSprite spriteWithImageNamed: @" ball.png" ];
45
45
[self addChild: _ball];
@@ -106,8 +106,8 @@ - (void)touchBegan:(CCTouch *)touch withEvent:(CCTouchEvent *)event
106
106
{
107
107
// find out what paddle is being touched
108
108
Paddle *paddle = nil ;
109
- if ([_paddleA validTouchPosition: touch.locationInWorld]) paddle = _paddleA ;
110
- else if ([_paddleB validTouchPosition: touch.locationInWorld]) paddle = _paddleB ;
109
+ if ([_paddleLeft validTouchPosition: touch.locationInWorld]) paddle = _paddleLeft ;
110
+ else if ([_paddleRight validTouchPosition: touch.locationInWorld]) paddle = _paddleRight ;
111
111
112
112
// if the touch is not for a paddle, just pass the touch on, and exit
113
113
if (paddle == nil )
@@ -134,13 +134,13 @@ - (void)touchMoved:(CCTouch *)touch withEvent:(CCTouchEvent *)event
134
134
Paddle *paddle;
135
135
136
136
// find out where the touch belogs
137
- if (touch.uiTouch == _paddleA .touch )
137
+ if (touch.uiTouch == _paddleLeft .touch )
138
138
{
139
- paddle = _paddleA ;
139
+ paddle = _paddleLeft ;
140
140
}
141
- else if (touch.uiTouch == _paddleB .touch )
141
+ else if (touch.uiTouch == _paddleRight .touch )
142
142
{
143
- paddle = _paddleB ;
143
+ paddle = _paddleRight ;
144
144
}
145
145
146
146
// check for valid position
@@ -158,13 +158,13 @@ - (void)touchMoved:(CCTouch *)touch withEvent:(CCTouchEvent *)event
158
158
159
159
- (void )touchEnded : (CCTouch *)touch withEvent : (CCTouchEvent *)event
160
160
{
161
- if (touch.uiTouch == _paddleA .touch )
161
+ if (touch.uiTouch == _paddleLeft .touch )
162
162
{
163
- _paddleA .touch = nil ;
163
+ _paddleLeft .touch = nil ;
164
164
}
165
- else if (touch.uiTouch == _paddleB .touch )
165
+ else if (touch.uiTouch == _paddleRight .touch )
166
166
{
167
- _paddleB .touch = nil ;
167
+ _paddleRight .touch = nil ;
168
168
}
169
169
}
170
170
@@ -176,34 +176,38 @@ - (void)update:(CCTime)delta
176
176
// move ball
177
177
_ball.position = ccpAdd (_ball.position , ccpMult (_ballVector, delta));
178
178
179
+ // *************************
180
+ // Game Logic
181
+ // *************************
182
+
179
183
// check for paddle-ball collisions
180
- if (CGRectIntersectsRect (_paddleA .boundingBox , _ball.boundingBox ))
184
+ if (CGRectIntersectsRect (_paddleLeft .boundingBox , _ball.boundingBox ))
181
185
{
182
186
// da beep
183
187
[[OALSimpleAudio sharedInstance ] playEffect: @" beep.wav" ];
184
188
// adjust ball position
185
- _ball.position = (CGPoint){_paddleA .position .x + ((_paddleA .contentSize .width + _ball.contentSize .width ) * 0.5 ), _ball.position .y };
189
+ _ball.position = (CGPoint){_paddleLeft .position .x + ((_paddleLeft .contentSize .width + _ball.contentSize .width ) * 0.5 ), _ball.position .y };
186
190
// change direction
187
191
_ballVector.x = -_ballVector.x ;
188
192
189
193
// add some angle
190
194
// if ball is hit in upper half, spin the ball upwards, and downwards if hit in lower half
191
- float spin = (_ball.position .y - _paddleA .position .y ) / _gameSize.height * kGameSpinFactor ;
195
+ float spin = (_ball.position .y - _paddleLeft .position .y ) / _gameSize.height * kGameSpinFactor ;
192
196
// add some randomness
193
197
spin += (CCRANDOM_MINUS1_1 () * kGameSpinRandomFactor );
194
198
// adjust vector
195
199
_ballVector = ccpRotateByAngle (_ballVector, CGPointZero, spin * M_PI / 180 );
196
200
}
197
- else if (CGRectIntersectsRect (_paddleB .boundingBox , _ball.boundingBox ))
201
+ else if (CGRectIntersectsRect (_paddleRight .boundingBox , _ball.boundingBox ))
198
202
{
199
203
// da beep
200
204
[[OALSimpleAudio sharedInstance ] playEffect: @" beep.wav" ];
201
205
// adjust ball position
202
- _ball.position = (CGPoint){_paddleB .position .x -((_paddleB .contentSize .width + _ball.contentSize .width ) * 0.5 ), _ball.position .y };
206
+ _ball.position = (CGPoint){_paddleRight .position .x -((_paddleRight .contentSize .width + _ball.contentSize .width ) * 0.5 ), _ball.position .y };
203
207
// change direction
204
208
_ballVector.x = -_ballVector.x ;
205
209
// add some angle (see above)
206
- float spin = (_paddleB .position .y - _ball.position .y ) / _gameSize.height * kGameSpinFactor ;
210
+ float spin = (_paddleRight .position .y - _ball.position .y ) / _gameSize.height * kGameSpinFactor ;
207
211
spin += (CCRANDOM_MINUS1_1 () * kGameSpinRandomFactor );
208
212
_ballVector = ccpRotateByAngle (_ballVector, CGPointZero, spin * M_PI / 180 );
209
213
}
@@ -233,7 +237,7 @@ - (void)update:(CCTime)delta
233
237
{
234
238
// da beep
235
239
[[OALSimpleAudio sharedInstance ] playEffect: @" game.wav" ];
236
- // paddle B scored
240
+ // paddle right scored
237
241
238
242
239
243
@@ -244,7 +248,7 @@ - (void)update:(CCTime)delta
244
248
{
245
249
// da beep
246
250
[[OALSimpleAudio sharedInstance ] playEffect: @" game.wav" ];
247
- // paddle A scored
251
+ // paddle left scored
248
252
249
253
250
254
@@ -261,14 +265,16 @@ - (void)serveFromSide:(PaddleSide)side
261
265
// if invalid side, serve random
262
266
if (side == PaddleSideInvalid) side = (CCRANDOM_0_1 () > 0.5 ) ? PaddleSideLeft : PaddleSideRight;
263
267
268
+ CGPoint offset = (CGPoint){(_paddleLeft.contentSize .width + _ball.contentSize .width ) * 0.5 , 0 };
269
+
264
270
if (side == PaddleSideLeft)
265
271
{
266
- _ball.position = (CGPoint){_paddleA .position . x + ((_paddleA. contentSize . width + _ball. contentSize . width ) * 0.5 ), _paddleA. position . y } ;
272
+ _ball.position = ccpAdd (_paddleLeft .position , offset) ;
267
273
_ballVector = (CGPoint){kGameBallSpeed * _gameSize.width , 0 };
268
274
}
269
275
else
270
276
{
271
- _ball.position = (CGPoint){_paddleB .position . x - ((_paddleB. contentSize . width + _ball. contentSize . width ) * 0.5 ), _paddleB. position . y } ;
277
+ _ball.position = ccpSub (_paddleRight .position , offset) ;
272
278
_ballVector = (CGPoint){-kGameBallSpeed * _gameSize.width , 0 };
273
279
}
274
280
}
0 commit comments