p5.js:基于圆形和矩形面板的简单绘画系统

摘要
绘画的元素中,采用码绘对绘画材料与交互方式进行改进十分方便,比如可以加上动态效果,有规律的形状,绘画的基本元素不再使用基本像素等

设计思路
参考老师的案例,采用圆形面板来当绘制的panel,矩形面板的功能我也实现了一个自己的版本。采用上一次说的面向对象的方法,能够方便地改变每个元素的坐标,颜色等信息。

tips:
由于想象力有限,所以只能做出仅有的几个功能。

首先是定义一个绘制圆形的类:
它包括以下几个属性:

  1. 创建时的坐标
  2. 当前坐标
  3. 半径
  4. 旋转角度
  5. 旋转角度增加量
  6. 是否旋转
  7. 是否平移
  8. 是否被画笔画过

如果被画过,那么它的颜色就由笔刷面板来控制,代码:

function drawFcn(x,y,theta,angle,radius,rot,trans,painted)
{
//坐标
this.x=x;
this.y=y;
//初始坐标
this.initx=x;
this.inity=y;
//旋转角度
this.theta=theta;
//旋转角度增加量
this.angle=angle;
//半径
this.radius=radius;
//是否旋转
this.rotate=rot;
//是否平移
this.trans=trans;
//是否被画过
this.painted=painted;

this.draw_roundness=function()
{
  if(!this.painted)//如果没有
{
fill(p_RGB_R, p_RGB_G, p_RGB_B, opacity);//使用本身颜色
}
else if(this.painted)
{
fill(b_RGB_R, b_RGB_G, b_RGB_B,opacity);//使用笔刷颜色

}
push();
rotate(this.theta);
if(this.trans)//是否移动
{
  if(this.x<=this.initx+200&&this.x>=0)
  {
    if(!is_contrary)
  {
    this.x-=c_tran_speed;
  }
  else
  {
    this.x+=c_tran_speed;
  }
}
}
if(this.rotate)//是否旋转
{
  this.theta+=this.angle;
}
strokeWeight(c_stroke);

ellipse(this.x,this.y,this.radius,this.radius);
pop();

}
}

定义数组来保存对象并且随着Gui面板变量更新而更新(zoom是整体圆形的半径,radius是单个圆形的半径):

//更新、初始化圆形
function InitRoundnessList()
{ 
  var r = radius * zoom;//半径
  if(RoundList.length>seeds)
  {
    RoundList.length=seeds;
  }
  else if(RoundList.l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值