首页 > 未分类 > 第一期boss代码学习笔记
2017
07-23

第一期boss代码学习笔记

首先是在卡卡大神给出代码之后,学习了一下,在源代码的基础上加上了注释,最后再说一下自己的理解。

//这个数组用来存储最初开始时的点的坐标
ArrayList poop; //定义一个数组,从后面的代码可以看出,这是点的坐标
//这是预设的距离,用来判断两点之间的距离是否小于预设的距离,目的在于是否要绘制三角形
int distance =50; //距离
//用来标记。。。。。。。。。。
boolean flag=true; //一个布尔变量

//初始化
void setup()
{
size(500, 500); //定义窗口大小
smooth(); //平滑处理
poop = new ArrayList(); //为数组实例化对象
for (int i=0;i<120;i++) { //这里给出了点的个数:120
PVector PD = new PVector(random(-150, 150), random(-150, 150)); //这是在随机创建点的坐标
Dots D = new Dots(PD); //点对象,坐标为随机创建
poop.add(D); //将点添加进数组
}
}

//绘制更新
void draw()
{
background(255); //窗口背景颜色:白色
translate(width/2, height/2); //将窗口坐标原点从左上角移动到中心
pushStyle(); //保存当前风格样式
//这里设置的填充颜色是运行后看到的圆形区域的颜色
fill(0); //设置填充颜色:黑色
stroke(0,50); //设置边框颜色
ellipse(0,0,400,400); //绘制圆形,也是我们看到的变换区域
popStyle(); //恢复之前风格样式
for (int i=0;i<poop.size();i++) { //依次遍历每一个点
Dots dots1 = (Dots) poop.get(i); //获取一个点的对象
dots1.display(); //将该点绘制出来
dots1.update(); //更新该点的位置
for (int j=i+1;j<poop.size();j++) { //遍历除该点后所有点
Dots dots2 = (Dots) poop.get(j); //获取一个点的对象
dots2.update(); //更新该点的位置
if (dist(dots1.location.x, dots1.location.y, dots2.location.x, dots2.location.y)<distance) {//如果两点距离小于预设值
//因为绘制三角行需要三个点
for (int k=j+1;kradius) {//点的坐标离中心的距离是否大于预设距离
velocity.mult(-1); //反方向运动
location.add(velocity);
}
else {
location.add(velocity); //原方向运动
}
}
}

思路是:用一个数组初始化,创建一些二维的点。之后封装对点的运动为Dots。绘制三角形是选中一个点P1,然后从顺序之后的所有点中选择与它距离小于预设值的那个点P2,之后再从P2顺序之后的点中选中第三个点P3,这样就形成了三角形需要的三个点,然后是绘制三角形,颜色由第三个点决定。

值得一提的是pushStyle()和对应的popStyle();从函数名字就能体会出来其意义,将当前设置的风格参数入栈,将当前设置的风格参数出栈,那更直观的理解就是,入栈 == 保存,出栈 == 删除。

对于pushStyle()所涉及的参数,有以下函数来设定:
fill()填充颜色
stroke()边线颜色
tint()着色器,这个不太理解是什么,晚点查查
strokeWeight()边线宽度
strokeCap()笔刷末端样式,圆形,方形等
strokeJoin()笔刷交点样式,即两个线条相交时,借口是什么样子的,像墙的拐角一样,矩形的,圆滑的等等
imageMode()图片加载样式,即图片被加载在哪个地方,中间,上、下、左、右等
rectMode()填充区域样式,即填充区域在哪里,中间,上、下、左、右等
ellipseMode()椭圆绘制方式,即对函数的四个参数的解释,不同的解释,就对应了不同的绘制方式
shapeMode()位置绘制方式,即对某一对象,设定新的绘制位置,也是通过对参数的不同解释来实现的
colorMode()颜色格式,颜色表示除了RGB还有其他样式,我不太懂这方面
textAlign()文本对齐
textFont()文本字体
textMode()文本格式
textSize()文本大小
textLeading()文本行间距

emissive()
specular()
shininess()

以上,是我个人的理解,也有很多地方不太懂:pushStyle()和popStyle(),beginShape()和endShape(),还有那个flag的作用,以及keyPress()函数的作用;
如有错误,谢谢指正!

处于学习期的fishVD肯定是有错误和不足的,随着学习的深入,我会将之前不理解、错误的、不足的地方改正和补充的。

卡卡大神的boss源码



最后编辑:
作者:fishVD
知识就是金钱

第一期boss代码学习笔记》有 3 条评论

留下一个回复

你的email不会被公开。