我正在尝试访问同一对象的多个实例,但我不知道该怎么做。 我已经尝试将它们添加到数组中,但我也遇到了一个奇怪的错误。 有人可以帮我解决这个问题吗?我不想复制和运行此代码3次。我对此很新,所以有人可以一步一步地解释它吗?
//
// C4WorkSpace.m
// Week_4_Assignment
//
// Created by Parth Soni on 2013-10-06.
//
#import "C4Workspace.h"
@implementation C4WorkSpace
{
C4Shape *circ, *obstacles, *obstacles2, *obstacles3; // the shapes I am building
CGRect mycirc, obstacle_circ;
CGPoint p, o; // the coordinates of those shapes
C4Sample *sample;
int glCounter_1, glcounter_2, glcounter_3;
BOOL collisionHasHappened ;
C4Timer *timer;
}
//Setting up the game!
-(void)setup {
//work your magic here
collisionHasHappened = FALSE; //Checks if objects have collided
[self createShape]; //Creates the Userball
[self createObstacles]; // Creates obstacle ball
glCounter_1 = 0; // a counter for morphing shapes
[self createObstacles_2]; // Creates obstacle ball
glcounter_2 = 0; // a counter for morphing shapes
[self createObstacles_3]; // Creates obstacle ball
glcounter_3 = 0; // a counter for morphing shapes
sample = [C4Sample sampleNamed:@"Jump.wav"]; // Audio files
[sample prepareToPlay]; // Load the audio
}
// Creating Userball
-(void) createShape {
mycirc = CGRectMake(0,0, 100,100); // The Size of the Original Circle
p = self.canvas.center; // CG Point
circ = [C4Shape ellipse: mycirc]; // It's a Circle!
circ.center = p; // The Center of the Circle is P
[self.canvas addShape:circ]; // Add THY CIRCLE
circ.userInteractionEnabled = NO; // Thy circle has no sense of any interaction thing
}
//Creates Obstacles
-(void) createObstacles {
obstacle_circ = CGRectMake(0,0, 50,50); // The Size of the Original Circle
o.x += 200;
o.y += 300;
obstacles = [C4Shape ellipse: mycirc]; // It's a Circle!
obstacles.center = o; // The Center of the Circle is P
[self.canvas addShape:obstacles]; // Add THY CIRCLE
}
-(void) createObstacles_2 {
obstacle_circ = CGRectMake(0,0, 50,50); // The Size of the Original Circle
o.x += 200;
o.y += 300;
obstacles2 = [C4Shape ellipse: mycirc]; // It's a Circle!
obstacles2.center = o; // The Center of the Circle is P
[self.canvas addShape:obstacles2]; // Add THY CIRCLE
}
-(void) createObstacles_3 {
obstacle_circ = CGRectMake(0,0, 50,50); // The Size of the Original Circle
o.x += 200;
o.y += 300;
obstacles3 = [C4Shape ellipse: mycirc]; // It's a Circle!
obstacles3.center = o; // The Center of the Circle is P
[self.canvas addShape:obstacles3]; // Add THY CIRCLE
}
//Moves the Userball
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//Getting Location of Mouse
UITouch *place = [[event allTouches] anyObject]; // Get touches
CGPoint location = [place locationInView:place.view]; // Gets the location of the current mouse point
p.x = location.x-10;
p.y =location.y-10;
circ.animationDuration = 0.1f;
circ.center = p; // The Center of the Circle is P
if (!collisionHasHappened){
[self checkForCollision];
}
}
-(void) checkForCollision {
if(CGRectIntersectsRect(circ.frame, obstacles.frame ))
{
CGFloat time = 1.0f; // just make a random time frame!!!
obstacles.animationDuration = time; // make that the duration now!
NSInteger r = [C4Math randomIntBetweenA:75 andB:100]; // How farm from the radius does this need to be?
CGFloat theta = DegreesToRadians([C4Math randomInt:360]); // randomizing on which degree will the circle appear.
obstacles.center = CGPointMake(r*[C4Math cos:theta] + (300/2),
r*[C4Math sin:theta] + (700/2));
[sample play];
collisionHasHappened = TRUE;
glCounter_1++;
[self checkGameCompletion];
timer = [C4Timer automaticTimerWithInterval:2.0f target:self method:@"collisionActivate" repeats:NO];
}
else if(CGRectIntersectsRect(circ.frame, obstacles2.frame ))
{
CGFloat time = 1.0f; // just make a random time frame!!!
obstacles2.animationDuration = time; // make that the duration now!
NSInteger r = [C4Math randomIntBetweenA:75 andB:100]; // How farm from the radius does this need to be?
CGFloat theta = DegreesToRadians([C4Math randomInt:360]); // randomizing on which degree will the circle appear.
obstacles2.center = CGPointMake(r*[C4Math cos:theta] + (300/2),
r*[C4Math sin:theta] + (700/2));
[sample play];
collisionHasHappened = TRUE;
glcounter_2++;
[self checkGameCompletion];
timer = [C4Timer automaticTimerWithInterval:2.0f target:self method:@"collisionActivate" repeats:NO];
}
else if(CGRectIntersectsRect(circ.frame, obstacles3.frame ))
{
CGFloat time = 1.0f; // just make a random time frame!!!
obstacles3.animationDuration = time; // make that the duration now!
NSInteger r = [C4Math randomIntBetweenA:75 andB:100]; // How farm from the radius does this need to be?
CGFloat theta = DegreesToRadians([C4Math randomInt:360]); // randomizing on which degree will the circle appear.
obstacles3.center = CGPointMake(r*[C4Math cos:theta] + (300/2),
r*[C4Math sin:theta] + (700/2));
[sample play];
glcounter_3++;
[self checkGameCompletion];
collisionHasHappened = TRUE;
timer = [C4Timer automaticTimerWithInterval:2.0f target:self method:@"collisionActivate" repeats:NO];
}
}
-(void) collisionActivate {
collisionHasHappened = FALSE;
}
-(void) checkGameCompletion {
if (glCounter_1 == 3 && glcounter_2 ==1 && glcounter_3 ==2 ){
C4Log(@"GAME COMPLETE");
}
}
@end
答案 0 :(得分:1)
我认为你要求的是这样的:
//
// C4WorkSpace.m
// Week_4_Assignment
//
// Created by Parth Soni on 2013-10-06.
//
#import "C4Workspace.h"
@implementation C4WorkSpace
{
C4Shape *circ; // the shapes I am building
CGRect mycirc, obstacle_circ;
CGPoint p, o; // the coordinates of those shapes
C4Sample *sample;
int glcounter[3];
BOOL collisionHasHappened ;
C4Timer *timer;
NSMutableArray * myobstacles;
}
//Setting up the game!
-(void)setup {
collisionHasHappened = FALSE; //Checks if objects have collided
[self createShape]; //Creates the Userball
sample = [C4Sample sampleNamed:@"Jump.wav"]; // Audio files
[sample prepareToPlay]; // Load the audio
myobstacles = [NSMutableArray array];
for ( int i = 0; i < 3; i++)
{
C4Shape * s = [C4Shape ellipse: mycirc];
o.x += 200;
o.y += 300;
s.center = o; // The Center of the Circle is P
[myobstacles addObject:s];
[self.canvas addShape:myobstacles[i]]; // Add THY CIRCLE
glcounter[i]=0;
}
}
// Creating Userball
-(void) createShape {
mycirc = CGRectMake(0,0, 100,100); // The Size of the Original Circle
p = self.canvas.center; // CG Point
circ = [C4Shape ellipse: mycirc]; // It's a Circle!
circ.center = p; // The Center of the Circle is P
[self.canvas addShape:circ]; // Add THY CIRCLE
circ.userInteractionEnabled = NO; // Thy circle has no sense of any interaction thing
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *place = [[event allTouches] anyObject]; // Get touches
CGPoint location = [place locationInView:place.view]; // Gets the location of the current mouse point
p.x = location.x-10;
p.y =location.y-10;
circ.animationDuration = 0.1f;
circ.center = p; // The Center of the Circle is P
if (!collisionHasHappened){
[self checkForCollision];
}
}
-(void) checkForCollision {
for ( int i = 0 ; i < 3; i++)
{
C4Shape * s = myobstacles[i];
if(CGRectIntersectsRect(circ.frame, s.frame ))
{
CGFloat time = 1.0f; // just make a random time frame!!!
s.animationDuration = time; // make that the duration now!
NSInteger r = [C4Math randomIntBetweenA:75 andB:100]; // How farm from the radius does this need to be?
CGFloat theta = DegreesToRadians([C4Math randomInt:360]); // randomizing on which degree will the circle appear.
s.center = CGPointMake(r*[C4Math cos:theta] + (300/2),
r*[C4Math sin:theta] + (700/2));
[sample play];
glcounter[i]++;
[self checkGameCompletion];
collisionHasHappened = TRUE;
timer = [C4Timer automaticTimerWithInterval:2.0f target:self method:@"collisionActivate" repeats:NO];
}
}
}
-(void) collisionActivate {
collisionHasHappened = FALSE;
}
-(void) checkGameCompletion {
if (glcounter[0] == 3 && glcounter[1] ==1 && glcounter[2] ==2 ){
C4Log(@"GAME COMPLETE");
}
}
@end
我所做的是NSMutableArray
为您的障碍保留C4Shape
的实例。我还添加了一个int
数组来保存glcounter
。现在发生的是for
循环创建一个新的C4Shape
,然后将其添加到数组中。在checkForCollision
函数中,您现在将找到另一个for
循环,该循环遍历数组并检查每个对象以查看它是否发生碰撞。
如果您想要与多个对象进行交互,最好考虑将它们放入数组中。然后,您可以在要与其通信时创建指向要与之对话的对象的新指针。这是Objective-C的真正优势之一。