“运动”的龙猫

news/2024/11/22 4:51:50/

上一篇手绘vs码绘  https://blog.csdn.net/Yangjin121/article/details/84325023

  • 让作品“动”起来

继上一篇不会动的假龙猫之后,这次添加了一些细微的动图

  • 首先让龙猫的肚子,脚,眼睛动起来,相比之前稍微显得滑稽鬼畜。

具体代码:

  
//在draw函数里画的龙猫的肚子push();translate(350,370);fill(219,217,183);rotate(frameCount / 50.0);polygon(0, 0, 100, 12); pop();//polygon函数
function polygon(x, y, radius, npoints) {var angle = TWO_PI / npoints;beginShape();for (var a = 0; a < TWO_PI; a += angle) {var sx = x + cos(a) * radius;var sy = y + sin(a) * radius;vertex(sx, sy);}endShape(CLOSE);
}
  •  加入交互,鼠标点击灯的位置,颜色会随机变换

 

  //画出灯strokeWeight(0);stroke(r, g, b);fill(r, g, b, 127);ellipse(50, 50, 80, 80);//mousePressed函数
function mousePressed() {// Check if mouse is inside the circlevar d = dist(mouseX, mouseY, 50, 50);if (d < 100) {// Pick new random color valuesr = random(255);g = random(255);b = random(255);}
}

加入雪花

// loop through snowflakes with a for..of loopfor (let flake of snowflakes) {flake.update(t); // update snowflake positionflake.display(); // draw snowflake}function snowflake() {// initialize coordinatesthis.posX = 0;this.posY = random(-50, 0);this.initialangle = random(0, 2 * PI);this.size = random(2, 3);// radius of snowflake spiral// chosen so the snowflakes are uniformly spread out in areathis.radius = sqrt(random(pow(width / 2, 2)));this.update = function(time) {// x position follows a circlelet w = 0.6; // angular speedlet angle = w * time + this.initialangle;this.posX = width / 2 + this.radius * sin(angle);// different size snowflakes fall at slightly different y speedsthis.posY += pow(this.size, 0.5);// delete snowflake if past end of screenif (this.posY > height) {let index = snowflakes.indexOf(this);snowflakes.splice(index, 1);}};this.display = function() {ellipse(this.posX, this.posY, this.size);};
}
  • 完整代码


let snowflakes = []; // array to hold snowflake objects
var r, g, b;
function setup() {createCanvas(700, 500);noStroke();r = random(255);g = random(255);b = random(255);}function draw() {background(167,148,150);let t = frameCount / 60; // update time// create a random number of snowflakes each framefill(219,217,183);for (var i = 0; i < random(5); i++) {snowflakes.push(new snowflake()); // append snowflake object}// loop through snowflakes with a for..of loopfor (let flake of snowflakes) {flake.update(t); // update snowflake positionflake.display(); // draw snowflake}//dengstrokeWeight(0);stroke(r, g, b);fill(r, g, b, 127);ellipse(50, 50, 80, 80);//dianganfill(179,209,193);rect(40,88,20,500);//longmao//waixingfill(229,129,133);ellipse(350,350,220,240);ellipse(300,230,30,55); ellipse(400,230,30,55); rect(315,230,80,10);//duzipush();translate(350,370);fill(219,217,183);rotate(frameCount / 50.0);polygon(0, 0, 100, 12); pop();//yanjingpush();translate(300,260);fill(219,217,183);rotate(frameCount / 50.0);polygon(0, 0, 10, 6); pop();push();translate(400,260);fill(219,217,183);rotate(frameCount / 50.0);polygon(0, 0, 10, 6); pop();//heiseyanzhufill(0);ellipse(300,260,8,8);ellipse(400,260,8,8);ellipse(350,260,20,8);//jiaopush();translate(400,470);fill(219,217,183);rotate(frameCount / 50.0);polygon(0, 0, 20, 3); pop();push();translate(300,470);fill(219,217,183);rotate(frameCount / 50.0);polygon(0, 0, 20, 3); pop();}function mousePressed() {// Check if mouse is inside the circlevar d = dist(mouseX, mouseY, 50, 50);if (d < 100) {// Pick new random color valuesr = random(255);g = random(255);b = random(255);}
}// snowflake class
function snowflake() {// initialize coordinatesthis.posX = 0;this.posY = random(-50, 0);this.initialangle = random(0, 2 * PI);this.size = random(2, 3);// radius of snowflake spiral// chosen so the snowflakes are uniformly spread out in areathis.radius = sqrt(random(pow(width / 2, 2)));this.update = function(time) {// x position follows a circlelet w = 0.6; // angular speedlet angle = w * time + this.initialangle;this.posX = width / 2 + this.radius * sin(angle);// different size snowflakes fall at slightly different y speedsthis.posY += pow(this.size, 0.5);// delete snowflake if past end of screenif (this.posY > height) {let index = snowflakes.indexOf(this);snowflakes.splice(index, 1);}};this.display = function() {ellipse(this.posX, this.posY, this.size);};
}
function polygon(x, y, radius, npoints) {var angle = TWO_PI / npoints;beginShape();for (var a = 0; a < TWO_PI; a += angle) {var sx = x + cos(a) * radius;var sy = y + sin(a) * radius;vertex(sx, sy);}endShape(CLOSE);
}

 

  • 总结:

手绘一幅作品不需要知道所要画的物体的具体位置,而码绘需要确切的知道每个点的位置,大小,这相比手绘要费时间。手绘更加随心所欲,也知道自己会画出怎样的画,而码绘有很多不确定性,不一定知道自己能画出什么,这就会产生很多的意外的创作。而手绘只能通过超高的绘画水平来体现一幅画的意境以及想要表达的思想,码绘可以通过一些动作表达创作者想要表达的东西,还可以通过交互方式提升作品的趣味。

  • 参考链接:

p5.js官网教程:https://p5js.org/examples/

bilibili网站教程“详解码绘彩虹猫动画” https://www.bilibili.com/video/av19583422?t=45

bilibili网站教程“丹叔的教程”  https://www.bilibili.com/video/av16332092  (强烈推荐,入门很有用)

中国大学MOOC网互动媒体教程 https://www.bilibili.com/video/av16332092  (老师讲的很详细,还有QQ群可以讨论,提问)

CSDN博客:https://blog.csdn.net/magicbrushlv/article/details/77919571

简书里的一些作品集:https://www.jianshu.com/c/954638baa7ad

一位大佬做的创意动态绘版超级nice:https://blog.csdn.net/qq_27534999/article/details/79427721

 

 

 


http://www.ppmy.cn/news/328273.html

相关文章

Seata服务端的启动过程 学习记录

1.ServerRunner ServerRunner类实现了CommandLineRunner与DisposableBean接口&#xff0c;将会在Spring容器启动和关闭的时间&#xff0c;分别执行 run 和 destory 方法。 而seata服务端的启动过程&#xff0c;都藏在run方法中 2.整体流程 io.seata.server.Server#start pu…

一块奢侈品手表的成本价是多少?

导读&#xff1a;随着经济的发展&#xff0c;越来越多的人用上了奢侈品&#xff0c;小到一只口红&#xff0c;一个钱包&#xff0c;大到名车名表&#xff0c;奢侈品越来越被普通消费者所熟知。 抛开实用性不谈&#xff0c;奢侈品更让人着迷的是其品牌价值和象征的社会地位。但是…

算法刷题-哈希表-赎金信

在哈希法中有一些场景就是为数组量身定做的。 383. 赎金信 力扣题目链接 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串&#xff0c;判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成&#xff0c;返回 true &#xff1b;否…

【博学谷学习记录】超强总结,用心分享 | 架构师 Maven学习总结

文章目录 Maven基本1.什么是Maven2.为什么用Maven?&#xff08;1&#xff09;jar 包的规模&#xff08;2&#xff09; jar 包的来源&#xff08;3&#xff09;jar 包之间的依赖关系 3.Maven目录结构4.maven仓库配置 Pom层次Pom文件简介Super POM 依赖管理1 依赖传递2 传递性依…

【活动】如何对待工作中的失误

序言 作为一名软件开发程序员&#xff0c;我们每天都面临着无数的挑战和压力。 在这个充满竞争和变化的行业中&#xff0c;难免会犯错。 然而&#xff0c;如何正确地对待和处理这些失误&#xff0c;是必须要学会的重要技能。这不仅仅影响到我们的工作表现&#xff0c;更关乎我…

cmake 基本使用

目录 CMake都有什么? 使用cmake一般流程为&#xff1a; 1 生成构建系统 使用命令在build外编译代码: cmake基本语法 指定使用最低版本的cmake 指定项目名称 指定生成目标文件的名称 指定C版本 cmake配置文件使用 cmake配置文件生成头文件 版本号定义方法一: 版本号定…

华为荣耀7i刷linux,华为荣耀7i刷机教程_华为荣耀7i强刷官方系统包

华为荣耀7i的刷机教程来说一下&#xff0c;有没有需要的呢&#xff0c;之前给大家说过了有关这个手机的固件包的下载了&#xff0c;可是有一些机友不知道固件包下载下来之后如何操作&#xff0c;所以在这里整理了一下详细的刷机教程来供大家参考了&#xff0c;大家都知道&#…

华为荣耀8电信卡显示无服务器,华为荣耀8青春版

华为荣耀8青春版支持电信吗&#xff1f;华为荣耀8青春版支持电信卡吗&#xff1f;这是很多朋友关注的话题&#xff0c;自从荣耀8青春版上市以来&#xff0c;大家对它寄予了很高的期待&#xff0c;当然它惊艳的外观&#xff0c;给人带来了很大的冲击&#xff0c;具体是不是支持电…