CGContextSetFillColorWithColor(g, [UIColor greyColor].CGColor);
Я пытаюсь следовать книге O'Reilly, iPhone Game Development, но на Главе 3 страницы 73 я получаю эту ошибку:
error: request for member 'CGColor' in something not a structure or union
Согласно странице опечаток книги это - неподтвержденные опечатки в книге. Какой функциональный код, которым может быть заменена строка?
Дополнительные детали
Проект в качестве примера может быть загружен здесь.
Я встречался с ошибкой в функции рендеринга путем следования инструкциям книги от страницы 72 до страницы 73 для создания gsMain класса (его различное от проекта pg77 в качестве примера) в функции рендеринга gsMain.m
Фрагмент кода, которому книга сообщает для создания gsMain класса, как сопровождается:
//gsMain.h @interface gsTest : GameState { } @end //gsMain.m @implementation gsMain -(gsMain*) initWithFrame:(CGRect)frame andManager:(GameStateManager*)pManager { if (self = [super initWithFrame:frame andManager:pManager]) { NSLog(@"gsTest init"); } return self; } -(void) Render { CGContextRef g = UIGraphicsGetCurrentContext(); //fill background with gray CGContextSetFillColorWithColor(g, [UIColor greyColor].CGColor); //Error Occurs here CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)); //draw text in black CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor); [@"O'Reilly Rules!" drawAtPoint:CGPointMake(10.0,20.0) withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]]; } -(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event { UITouch* touch = [touches anyObject]; NSUInteger numTaps = [touch tapCount]; //todo: implement touch event code here } @end
Chapter3_Example_p77, как предполагается, показывает результат упражнений от страницы 71 - 77, но это очень отличается от данных инструкций, данных в 71 - 77. Следующий код является завершенным, компилируемым классом, загруженным с вышеупомянутой ссылки.
//gsMain.h #import
#import "GameState.h" @interface gsMain : GameState { } @end // gsMain.m // Example // Created by Joe Hogue and Paul Zirkle #import "gsMain.h" #import "gsTest.h" #import "Test_FrameworkAppDelegate.h" @implementation gsMain -(gsMain*) initWithFrame:(CGRect)frame andManager:(GameStateManager*)pManager { if (self = [super initWithFrame:frame andManager:pManager]) { //do initializations here. } return self; } - (void) Render { [self setNeedsDisplay]; //this sets up a deferred call to drawRect. } - (void)drawRect:(CGRect)rect { CGContextRef g = UIGraphicsGetCurrentContext(); //fill background with gray CGContextSetFillColorWithColor(g, [UIColor grayColor].CGColor); CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)); //draw text in black. CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor); [@"O'Reilly Rules!" drawAtPoint:CGPointMake(10.0, 20.0) withFont: [UIFont systemFontOfSize: [UIFont systemFontSize]]]; //fps display from page 76 of iPhone Game Development int FPS = [((Test_FrameworkAppDelegate*)m_pManager) getFramesPerSecond]; NSString* strFPS = [NSString stringWithFormat:@"%d", FPS]; [strFPS drawAtPoint:CGPointMake(10.0, 60.0) withFont:[UIFont systemFontOfSize: [UIFont systemFontSize]]]; } //this is missing from the code listing on page 77. -(void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event { UITouch* touch = [touches anyObject]; NSUInteger numTaps = [touch tapCount]; if( numTaps > 1 ) { [m_pManager doStateChange:[gsTest class]]; } } @end
Я скомпилировал пример p77
для Simulator 3.1.3 и не обнаружил никаких предупреждений или ошибок компилятора.
Код:
- (void)drawRect:(CGRect)rect {
CGContextRef g = UIGraphicsGetCurrentContext();
//fill background with gray
CGContextSetFillColorWithColor(g, [UIColor grayColor].CGColor);
CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
//draw text in black.
CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor);
[@"O'Reilly Rules!" drawAtPoint:CGPointMake(10.0, 20.0) withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]];
//...
}
компилируется нормально. Возможно, вы могли бы указать, какой из трех примеров вы компилируете и для какой целевой версии ОС?
Убедитесь, что вы #include
.
И это -grayColor
, а не -greyColor
.