Day 16 - 函数与物件互动3

接下来我们就可以制作一个myflower的object 去制作一个绽放花点的设定

Learp 使用 与物件搭配

留下前面的drawFlower 设定 里面的 位子 size 跟颜色 使用learp去呈现你想要的慢慢展开的效果

就可以呈现出一个你想做出来的一个花朵绽放的效果

var myFlower = {
	x:300,
	y:200,
	size:2,
	color:'#bce784'
}

function draw() {
	// ellipse(mouseX, mouseY, 20, 20);
	background(0)
	push()
	translate(myFlower.x,myFlower.y);
	drawFlower(myFlower.color,myFlower.size)
	pop();
	if(dist(mouseX,mouseY,myFlower.x,myFlower.y) < 200){ //利用mouseX,Y 去判定myFlowerX,y 的间隔
		myFlower.size = lerp(myFlower.size,2,0.05); // 使用lerp 提供一格一格的数字让花看起来慢慢打开

	}else{
		myFlower.size =lerp(myFlower.size,0,0.1);;
	}

}

https://ithelp.ithome.com.tw/upload/images/20211001/201037449Vyabxyt1b.png

接下来就是把元件拆两部分 花本身的开花 跟 花放置的位置

先制作个别花的物件

// 制作花物件
function generateRandomFlower(x,y){
	return{
		x:x || random(0,width),
		y:y|| random(0,height),
		size:random(0,2),
		clr:random(colorList)
	}
}

在随机产生出二十几个不同的样式

for(var i=0; i<20;i++){
	let flower = generateRandomFlower();
	print(flower);
	flowers.push(flower);		
}

就可以产生出不同的设定位置跟花的位置

接下来我们要来做蜜蜂

var bee= {} //每一个bee是一个object 
var bees = []; // bees是一个array

//设定一个绘制蜜蜂的function 
function drawBee(bee){
	push();
		translate(bee.x,bee.y);
		fill('#ffde23');
		ellipse(0,0,50,20);
		
		stroke('#a56a12');
		strokeWeight(5);
		line(-10,-10,-10,10);
		line(0,-10,0,10);
	line(10,-10,10,10);
	pop();
}
// 放入多个蜜蜂
function setup() {
	for(var i=0;i<5;i++){
			bees.push({x:random(width),y:random(height),speed:random(1)})
	}
}

// draw那边去判定每只蜜蜂有没有靠近花朵
function draw() {
	background(0)
	for(let i=0; i < flowers.length; i++){
			drawFlower(flowers[i])
			let hasBee = false
			for(let o=0;o<bees.length;o++){
				let bee = bees[o];
				if(dist(bee.x,bee.y,flowers[i].x,flowers[i].y) < 200){
					hasBee = true
					
				}
			}
			if(hasBee){ //利用mouseX,Y 去判定flowers[i]X,y 的间隔
				flowers[i].size = lerp(flowers[i].size,2,0.05); // 使用lerp 提供一格一格的数字让花看起来慢慢打开

			}else{
				flowers[i].size =lerp(flowers[i].size,0,0.1);;
			}
	}
	
	for(let o=0;o<bees.length;o++){
			let bee = bees[o]
			bee.x = lerp(bee.x,mouseX,bee.speed); //每只蜜蜂有专属的x跟 moouseX的间隔
			bee.y = lerp(bee.y,mouseY,bee.speed);
			drawBee(bee);
	}

}

reference

https://openprocessing.org/sketch/1259947


<<:  IT铁人DAY 16-Strategy 策略模式

>>:  android studio 30天学习笔记-day 16-databinding Recyclerview

D8 新增使用google account 登入的功能

前面做的那些都是让使用者直接在local端注册跟登入 今天处理一下怎麽做google登入 docsy...

离职倒数15天:我本来以为子宫是我的附属品,但该不会其实我就只是子宫的容器而已?

辞职前,最犹豫的一件事是「没请产假会不会太亏」,哈哈。几乎公司所有前辈都会劝你辞职前先做的事:买房跟...

【Bootstrap 5 客制化教学 - 6】BS5 utilities 客制化,让他变得跟 TailwindCSS 一样强!

其实 BS5 utilities 原始码打开有让我有惊艳的感觉,整体有重写过,所涵盖的功能也蛮适用...

无服务器计算(Serverless computing)支持微服务架构并具有最低管理开销来部署企业级应用程序的云服务模型

-使用 AWS 构建无服务器後端 微服务通常托管在部署在本地或 PaaS 上的容器中;它们也可以在...

前後端分离

在我工作前,团队 CICD 中将後端与前端一起打包,每次建构都需要花 9 分钟。这九分钟触发点是改了...