Issue with a point coordinates, which creates an unwanted triangle
- by Paul
I would like to connect the points from the red path, to the y-axis in blue. I figured out that the problem with my triangles came from the first point (V0) : it is not located where it should be.
In the console, it says its location is at 0,0, but in the emulator, it is not.
The code :
for(int i = 1; i < 2; i++) {
CCLOG(@"_polyVertices[i-1].x : %f, _polyVertices[i-1].y : %f", _polyVertices[i-1].x, _polyVertices[i-1].y);
CCLOG(@"_polyVertices[i].x : %f, _polyVertices[i].y : %f", _polyVertices[i].x, _polyVertices[i].y);
ccDrawLine(_polyVertices[i-1], _polyVertices[i]);
}
The output :
_polyVertices[i-1].x : 0.000000, _polyVertices[i-1].y : 0.000000
_polyVertices[i].x : 50.000000, _polyVertices[i].y : 0.000000
And the result : (the layer goes up, i could not take the screenshot before the layer started to go up, but the first red point starts at y=0) :
Then it creates an unwanted triangle when the code continues :
Would you have any idea about this? (So to force the first blue point to start at 0,0, and not at 50,0 as it seems to be now)
Here is the code :
- (void)generatePath{
float x = 50; //first red point
float y = 0;
for(int i = 0; i < kMaxKeyPoints+1; i++) {
if (i<3){
_hillKeyPoints[i] = CGPointMake(x, y);
x = 150 + (random() % (int) 30);
y += -40;
} else if(i<20){ //going right
_hillKeyPoints[i] = CGPointMake(x, y);
x += (random() % (int) 30);
y += -40;
} else if(i<25){ //stabilize
_hillKeyPoints[i] = CGPointMake(x, y);
x = 150 + (random() % (int) 30);
y += -40;
} else if(i<30){ //going left
_hillKeyPoints[i] = CGPointMake(x, y);
//x -= (random() % (int) 10);
x = 150 + (random() % (int) 30);
y += -40;
} else { //back to normal
_hillKeyPoints[i] = CGPointMake(x, y);
x = 150 + (random() % (int) 30);
y += -40;
}
}
}
-(void)generatePolygons{
static int prevFromKeyPointI = -1;
static int prevToKeyPointI = -1;
// key points interval for drawing
while (_hillKeyPoints[_fromKeyPointI].y > -_offsetY+winSizeTop) {
_fromKeyPointI++;
}
while (_hillKeyPoints[_toKeyPointI].y > -_offsetY-winSizeBottom) {
_toKeyPointI++;
}
if (prevFromKeyPointI != _fromKeyPointI || prevToKeyPointI != _toKeyPointI) {
_nPolyVertices = 0;
float x1 = 0;
int keyPoints = _fromKeyPointI;
for (int i=_fromKeyPointI; i<_toKeyPointI; i++){
//V0: at (0,0)
_polyVertices[_nPolyVertices] = CGPointMake(x1, y1); //first blue point
_polyTexCoords[_nPolyVertices++] = CGPointMake(x1, y1);
//V1: to the first "point"
_polyVertices[_nPolyVertices] = CGPointMake(_hillKeyPoints[keyPoints].x, _hillKeyPoints[keyPoints].y);
_polyTexCoords[_nPolyVertices++] = CGPointMake(_hillKeyPoints[keyPoints].x, _hillKeyPoints[keyPoints].y);
keyPoints++; //from point at index 0 to 1
//V2, same y as point n°2:
_polyVertices[_nPolyVertices] = CGPointMake(0, _hillKeyPoints[keyPoints].y);
_polyTexCoords[_nPolyVertices++] = CGPointMake(0, _hillKeyPoints[keyPoints].y);
//V1 again
_polyVertices[_nPolyVertices] = _polyVertices[_nPolyVertices-2];
_polyTexCoords[_nPolyVertices++] = _polyVertices[_nPolyVertices-2];
//V2 again
_polyVertices[_nPolyVertices] = _polyVertices[_nPolyVertices-2];
_polyTexCoords[_nPolyVertices++] = _polyVertices[_nPolyVertices-2];
//CCLOG(@"_nPolyVertices V2 again : %i", _nPolyVertices);
//V3 = same x,y as point at index 1
_polyVertices[_nPolyVertices] = CGPointMake(_hillKeyPoints[keyPoints].x, _hillKeyPoints[keyPoints].y);
_polyTexCoords[_nPolyVertices] = CGPointMake(_hillKeyPoints[keyPoints].x, _hillKeyPoints[keyPoints].y);
y1 = _polyVertices[_nPolyVertices].y;
_nPolyVertices++;
}
prevFromKeyPointI = _fromKeyPointI;
prevToKeyPointI = _toKeyPointI;
}
}
- (void) draw {
//RED
glColor4f(1, 1, 1, 1);
for(int i = MAX(_fromKeyPointI, 1); i <= _toKeyPointI; ++i) {
glColor4f(1.0, 0, 0, 1.0);
ccDrawLine(_hillKeyPoints[i-1], _hillKeyPoints[i]);
}
//BLUE
glColor4f(0, 0, 1, 1);
for(int i = 1; i < 2; i++) {
CCLOG(@"_polyVertices[i-1].x : %f, _polyVertices[i-1].y : %f", _polyVertices[i-1].x, _polyVertices[i-1].y);
CCLOG(@"_polyVertices[i].x : %f, _polyVertices[i].y : %f", _polyVertices[i].x, _polyVertices[i].y);
ccDrawLine(_polyVertices[i-1], _polyVertices[i]);
}
}
Thanks