processing制作熊猫头像跟随鼠标拖尾

news/2024/11/1 12:39:52/

先上效果图:

 我演示时电脑有点卡所以看着有些顺畅,你的电脑应该是没有问题的。

        processing实现跟随鼠标拖尾其实不难,在这篇文章中我将介绍图案封装、封装图案整体缩放、数组的创建方法以及一些逻辑处理技巧像for和if这些

目录

1.封装图案

2、图案的整体缩放

 3、容器(数组)

 4、获取最新坐标点及过去的坐标点

5、拖尾效果实现

6、最后实现代码汇总如下:

7、特别鸣谢


设计思路及关键知识点解析:

1.封装图案

首先封装好图案(在这里我们封装的是熊猫头像,当然你可以换成别的形状)

封装函数:

pushMatrix();

...

popMatrix();

2、图案的整体缩放

我们观察到每个熊猫头是不一样大小的,所以我们封装的图案大小也需要跟着鼠标移动而变化,也就是效果图上的时间远的比较小,那么我们只需要将图案按一定的比例缩小就好,在下面这个函数中percentage就是比例,封装的size*percentage=显示的大小

scale(percentage);

 3、容器(数组)

        因为我们是一个拖尾的效果,也就是显示的熊猫数量肯定有限,所以我们通过一个数组来记录鼠标运动过的坐标从而来控制显示的熊猫数量

processing中创建数组的方法:

int x[] = new int[num];//x[]就是数组名

 4、获取最新坐标点及过去的坐标点

        至于怎么持续获取鼠标坐标点,我在这篇文章里面有提到,有需要的建议看一下,那么在这里我们需要解决一个问题就是我们有了存放坐标点的容器那要怎么样存储坐标点呢?或者说怎么定义这个容器的存放逻辑呢?其实也很简单,无非简单的就两种:1、将最新的坐标放在0号位置历史的按降序往后放也就是越靠0越是近期的;2、将最新的坐标放在49号位置历史的按升序往前放也就是越靠49越是近期的。那么在这里我选择第一种,因为我感觉这种更易于实现和理解。       

...
...
for (int i = x.length-1; i > 0; i--) {
x[i] = x[i-1];
y[i] = y[i-1];
}x[0] = mouseX; 
y[0] = mouseY; 
...
...

        在这段代码中我们就实现了将前面的坐标往后递的过程,x.length是获取数组的长度,并且我认为我这里有一个非常巧妙的地方也就是for循环的条件,当然也有一些瑕疵

5、拖尾效果实现

这是比较难想到的一个点,先看代码:

for (int i = x.length-1; i > 0; i--) {
if(i<=x.length*0.2){panda(x[i],y[i],1.0);}
else if(i<=x.length*0.4){panda(x[i],y[i],0.8);}
else if(i<=x.length*0.6){panda(x[i],y[i],0.6);}
else if(i<=x.length*0.8){panda(x[i],y[i],0.4);}
else if(i<=x.length*1.0){panda(x[i],y[i],0.2);}
}

分享一下我的思路哈:因为数组里面0-49的坐标点越往后越过去得久,而要实现拖尾也就是要后面的头像小而前面的大,那么在这里我们就可以以一个梯度的方式逐步变小(暂时只想到这种)后面的头像,那要怎么样知道哪些是后面的那些是要变小的呢?在这里我想到了这个数组的时间关系和它元素的序号是有联系得,也就是序号越小,图像越要大,那么问题就非常好解决了,更多的请慢慢品味代码,而要想那个拖尾更细腻一些,也非常好解决,只需要把梯度降低就好也就是加else if语句

6、最后实现代码汇总如下:

int num = 50;
int x[] = new int[num];
int y[] = new int[num];void setup() {
size(800, 800);
smooth();
}void draw() {
background(255);
for (int i = x.length-1; i > 0; i--) {
x[i] = x[i-1];
y[i] = y[i-1];
}x[0] = mouseX; 
y[0] = mouseY; 
for (int i = x.length-1; i > 0; i--) {
if(i<=x.length*0.2){panda(x[i],y[i],1.0);}
else if(i<=x.length*0.4){panda(x[i],y[i],0.8);}
else if(i<=x.length*0.6){panda(x[i],y[i],0.6);}
else if(i<=x.length*0.8){panda(x[i],y[i],0.4);}
else if(i<=x.length*1.0){panda(x[i],y[i],0.2);}
}}
void panda(float x,float y,float percentage){
pushMatrix();
translate(x,y); 
scale(percentage);
//ears
fill(0);
strokeWeight(1); 
stroke(255);
ellipse(-35,-25,35,35);
ellipse(35,-25,35,35);
//head
fill(255);
strokeWeight(1); 
stroke(0);
ellipse(0,0,100,90);
//eye
fill(0);
ellipse(-25,5,30,35);
ellipse(25,5,30,35);
fill(255);
ellipse(-25,0,6,6); 
ellipse(25,0,6,6);
fill(0);
ellipse(0,25,7,5);
noFill();
stroke(0);
strokeWeight(1);
bezier(-2.5,35,-2.5,37,2.5,37,2.5,35);
popMatrix();}

7、特别鸣谢

熊猫头像的代码源自于广铁职院刘博士,感谢他一直以来的支持!


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

相关文章

修改鼠标光标的形状

我还是比较习惯通过案例说明问题&#xff0c;需求案例描述如下&#xff1a;实现一个从 CDialog 派生的窗口类&#xff0c;要求当鼠标移动到窗口客户区的时候&#xff0c;修改鼠标指针的形状&#xff0c;使其显示一个小手的形状。 为了后面阐述方便&#xff0c;我们假设该派生窗…

鼠标的图像

var mouse_pic:Texture; function Start(){ Screen.showCursorfalse; }function OnGUI(){ var mouse_posInput.mousePosition; GUI.DrawTexture(Rect(mouse_pos.x,Screen.height-mouse_pos.y,16,20),mouse_pic); }

鼠标移动文字上显示图片

鼠标移动显示图片 js <script type"text/javascript">$(function(){$(document).mousemove(function (en) { var xPos parseInt(en.pageX15) "px";var yPos parseInt(en.pageY12) "px"; $("div").css("left", …

前端做一个鼠标指针图案替换鼠标样式并在项目中使用

先做一个.cur 类型的文件&#xff08;.cur类型的文件众多浏览器都能兼容&#xff09;&#xff1a; 如果可以的话&#xff0c;可以自己画一张鼠标样式的图片。这里从网上借用了一张橡皮擦的 .jpg 图片。 这个图片不是 .png 类型的图片&#xff08;有白色的背景&#xff09;。 然…

当鼠标放在图片或文字上,如何让鼠标箭头变成小手

此处应通过css来实现&#xff1a;以<img>为例 <image id" quesNum " stylewidth:10px;height:10px;margin-left:10px;cursor:pointer;visibility:hidden srcimg/addsel.png alt添加 οnclickaddSelector(this) > 红色标注部分就是实现鼠标箭头变小…

网页制作中如何改变鼠标的形状!

< STYLE > ... <!-- BODY{...}{ cursor:url(鼠标地址); } --> </ STYLE >

鼠标形状

cursor: pointer; 鼠标变成小手 cursor: move; 鼠标变成四角箭头 cursor: text; 鼠标变成工形插入条光标 cursor: default; 鼠标变成小白

怎么改变鼠标图案HTML,怎么换鼠标指针的颜色和图案?

从电脑桌面的左下角&#xff0c;单击开始菜单-然后选择进入-“控制面板”&#xff0c;如下图所示&#xff1a; 进入电脑控制面板 如何修改鼠标指针样式&#xff0c;接啊如下 打开电脑&#xff0c;台式机与笔记本电脑均可适用&#xff0c;在此以台式机Windows7系统为例。 步骤阅…