I have an array that contains the points for draw开发者_C百科ing multiple hills. When I just draw straight lines it works fine, but that is unnatural so I want to make the top/bottom parts of a hill curved.
for(i = 0; i < rPoints.length - 1; i++){
gamebg.lineStyle(1,0x000000,100);
gamebg.moveTo(rPoints[i][0] + 45, rPoints[i][1]); //Doesn't directly move to a point so there is empty space for the curved parts.
if(rPoints[i+1][1] > rPoints[i][1]){ //Determines if it is the top part of a hill or a bottom part, compares y
gamebg.lineTo(rPoints[i+1][0], rPoints[i+1][1]);
gamebg.moveTo(rPoints[i+1][0], rPoints[i+1][1]);
//I didn't add a curveTo here because I only wanted to test it on one so I can make changes easier
} else {
gamebg.lineTo(rPoints[i+1][0], rPoints[i+1][1]);
gamebg.moveTo(rPoints[i+1][0], rPoints[i+1][1]);
gamebg.curveTo(rPoints[i+1][0]+22, rPoints[i+1][1]-25, rPoints[i+1][1]+45, rPoints[i+1][1]);
}
}
When I run the code, it seems to work some times.
When it works, it only works for the first one. http://i.stack.imgur.com/5AeG4.png
Thanks!
it is much easier to determine the parts of the hill by the order of the Array containing the points. In this case you have to iterate by 3 instead of 1. I tested the following code, it worked fine. *Nicholas
/*
* ActionScript 2
*
* Drawing some Hills :-)
*
* The following Loop draws Hills using an Array containing
* a multiple of 3 Points
*
* p5
* p2 /\
* /\ / \
* / \ / \
* p1 p3 p4 p6
*
*/
var rPoints = [
// First Hill
[50,200],
[100,10],
[150,200],
// Second Hill
[100,200],
[150,80],
[200,200],
// Will not be drawn
[500,200]
];
for(i = 0; i <= rPoints.length-3; i+=3){
gamebg.lineStyle(1,0x000000,100);
// Move to the 1st Point
gamebg.moveTo(rPoints[i][0], rPoints[i][1]);
// Curve to 2nd Point (For a smooth curve the Control Point should be in the Top Left Corner)
gamebg.curveTo(rPoints[i][0], rPoints[i+1][1], rPoints[i+1][0], rPoints[i+1][1]);
// Curve to 3rd Point (For a smooth curve the Control Point should be in the Top Right Corner)
gamebg.curveTo(rPoints[i+2][0], rPoints[i+1][1], rPoints[i+2][0], rPoints[i+2][1]);
// Close the shape (If you want to)
gamebg.lineTo(rPoints[i][0], rPoints[i][1]);
}
精彩评论