#opengl-es #cocos2d-iphone
#opengl-es #cocos2d-iphone
Вопрос:
Я пытаюсь проследить 2 пути на экране через ряд вершин (стиль соединения точек). Каждый должен быть разного цвета, и у каждого свой список вершин.
Я начал с создания класса, который может отслеживать путь, затем создал 2 экземпляра этого класса, по одному для каждого пути. Я отменил метод розыгрыша. Он работал просто отлично, за исключением того, что по какой-то причине только первый экземпляр класса вызывал метод draw . Я решил, что это проблема с OpenGL, поэтому я сделал это снова, используя CCDrawNode, и в нем все та же ошибка.
Только один экземпляр (blackPath) отображает любые объекты на экране. На самом деле запланированный метод updateEndpoint: даже не вызывается для объекта whitePath, хотя он успешно создан.
Мой класс Drawer.m:
const float size = 10;
const float speed = 5;
ccColor4F pathColor;
int numPoints;
NSArray * path;
CGPoint endPoint;
@implementation Drawer
-(id)initWithPath:(NSArray*)p andColorIsBlack:(BOOL)isBlack{
self = [super init];
// Record input
path = p.copy;
pathColor = ccc4f(1.0f, 1.0f, 1.0f, 1.0f);
if(isBlack){
pathColor = ccc4f(0.0f, 0.0f, 0.0f, 1.0f);
}
// Set variables
numPoints = 1;
endPoint = [[path firstObject] position];
NSLog(@"Drawer initialized with path of length %u and color %hhd (isblack)", p.count, isBlack);
[self schedule:@selector(updateEndpoint:)];
return self;
}
-(void)updateEndpoint:(ccTime)dt{
NSLog(@"(%f, %f, %f, %f) Path", pathColor.r, pathColor.g, pathColor.b, pathColor.a);
[self drawDot:endPoint radius:size color:pathColor];
CGPoint dest = [[path objectAtIndex:numPoints] position];
float dx = dest.x - endPoint.x;
float dy = dest.y - endPoint.y;
// new coords are current distance * sign of distance
float newX = endPoint.x MIN(speed, fabsf(dx)) * ((dx>0) - (dx<0));
float newY = endPoint.y MIN(speed, fabsf(dy)) * ((dy>0) - (dy<0));
endPoint = ccp(newX, newY);
if(endPoint.x == dest.x amp;amp; endPoint.y == dest.y){
if(numPoints < path.count-1){
numPoints =1;
}
else{
[self unschedule:@selector(updateEndpoint:)];
}
}
}
И вот здесь я создаю экземпляры объектов:
-(id) init{
self = [super init];
[self addAllCards];
[self addScore];
xShrinkRate = [[Grid getInstance] sqWidth] / shrinkTime;
yShrinkRate = [[Grid getInstance] sqHeight] / shrinkTime;
dropList = [NSMutableArray new];
notDropList = [NSMutableArray new];
[self schedule:@selector(dropCard:) interval:0.075];
[self schedule:@selector(shrinkCards:)];
Drawer * whitePath = [[Drawer alloc] initWithPath:[[Score getInstance] whitePath] andColorIsBlack:false];
[self addChild:whitePath];
Drawer * blackPath = [[Drawer alloc] initWithPath:[[Score getInstance] blackPath] andColorIsBlack:true];
[self addChild:blackPath];
return self;
}
Ответ №1:
Измените (неконстантные) глобальные переменные на переменные экземпляра класса следующим образом:
@implementation Drawer
{
ccColor4F pathColor;
int numPoints;
NSArray * path;
CGPoint endPoint;
}