有趣的绘画系统

简介

本次我继续用码绘的思想来编写了一个绘画系统,此绘画系统将着重于动态和交互,希望呈现与众不同的效果。

编程环境

使用html+js+p5.js编写,所以通过浏览器即可以打开。

功能介绍

UI界面:

基础笔:不添加任何效果,通过touchStarted和touchMoved并且根据鼠标位置创建基础物体圆item

创建item并存储进地图中,便于以后使用,此处的效果和传统的手绘基本一样,这里的item就相当于手绘的颜料单位一样。显示效果如下:

 

添加阴影和动态大小变化后的效果如下:

从这里开始,我们就发现通过码绘能达到手绘无法达到的动态效果。

点击随机震动复选框可以达到一种震动效果,并且可以与上述功能叠加。

点击弹跳运动,可以产生一种弹跳效果,可以与上述功能叠加。

渐进笔:越先画出的点会越小,效果如图:

 

工具笔:圆周运动,选择圆周运动单选框,点击画布上某一点,会绘制一个圆,该圆周围的点会绕其旋转

效果如图:

引力运动:选择引力运动单选框,点击画布上某一点,各点会运动向该点,反复运动

效果如图:

中心对称:将画布分成规定的几个部分,然后在一个部分绘制图像时,其它部分绘画出中心对称的图像,可以点击随机颜色产生更加色彩丰富的效果:

另外除了上述功能外,还有诸多改变颜色,大小,截图,保存之类的基础功能,这里不在介绍。

实现简述:

基础物体类,绘制的单位圆

function items(x, y, size, color, velocity = 1) {

    this.x = x; //x坐标
    this.y = y; //y坐标
    this.size = size; //大小
    this.start_size = size;
    this.color = color; //颜色
    this.velocity = velocity; //速度
    this.direction = createVector(Math.random() * 2 - 1, Math.random() * 2 - 1); //方向-1到1
    this.target = null; //目标点
    //做表更新函数,同时更新item_map
    this.updatePos = function (x, y) {
        if (item_map) {
            item_map.refresh(this, x, y);
        }
        this.x = x;
        this.y = y;
    }
}

动画管理类Animator,动画类Animation,存储物体的地图ItemMap类。

通过变量pen的改变切换不同的模式。在window.onload中为html中各个ui组件绑定事件。

Setup()中初始化了画布

draw() 进行每一帧的绘制

touchMoved()和touchStarted()中添加item。

各类和函数详见源代码。

总结

相较于常规的绘画系统:

技法:本系统与传统绘画系统的技法基本相同,但是通过阴影和大小的动态变化让它的显示更加有趣。

工具:与传统绘画系统相比,我增加了可以让图画中某些点绕一点进行旋转的工具,以及移动向一点的工具,合理运用可以增强视觉体验,并且通过鼠标点击会形成不同效果,交互能力很强。

理念:抓住动态和交互,创造出与普通静态画不同的效果。

呈现效果:通过颜色的选取以及大小点的绘制,加以动态的效果,呈现出更加有趣的效果。

局限性:某些功能应用起来还具有难度,可能无法达到想要的效果,后续可以继续改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值