用户:
DDguan查看:9 回复:10 评论:9 创建时间:2023-03-17T21:25:38
大家因该看过很多麦块粒子秀吧~但在论坛搜了一下,好像神岛还没有类似的东西呢……于是我先尝试用模型复刻,可是发现模型的话效果不好……于是就想到用代码复刻了……
目前局限性:
神岛不仅有模型个数限制,还有粒子个数限制……也就是说神岛目前还做不出很华丽的粒子效果,差不多整3个大圆就撑不住了……
先给大家看看效果:
先是一条线:
然后一个大圈(代码自己琢磨了半天……累喵了):

做了个类似奇异博士的法阵简易版……:


代码展示:
async function setP(x,y,z){
const w = world.createEntity({
meshScale:[0,0,0],//大小
bounds: new Box3Vector3(0.01, 0.01, 0.01),//边界
position:[x,y,z],//位置
collides: false,//碰撞:False
gravity: false, //引力:False
particleColor:[
new Box3RGBColor(255,215,-50),
],//所有粒子颜色
particleSize:[4,4,4,4,4],//粒子大小
particleRate:1,//每秒生成15个粒子
particleLimit:1000,//粒子数量上限为30
particleLifetime:1.5//粒子存活5秒
})
}
async function setPRound(x,y,z,r,p){
for(let times=0; times<p; times++) {
const hudu = (2*Math.PI / 360) * 6 * times;
const xa = x + Math.sin(hudu) * r;
const ya = y - Math.cos(hudu) * r; // 注意此处是“-”号,因为我们要得到的Y是相对于(0,0)而言的。
const za=z;
setP(xa,ya,za)
}
}
//魔法
setPRound(20,20,20,5,125)
setPRound(20,20,19,3,90)
setPRound(20,20,18,1,60)
//大圈
setPRound(20,50,20,20,450)
//画线
for (let i = 0; i <= 50; i++) {
setP(i*0.6,20,20)
}
总结:
理论上来说,用粒子显示文字是不难的……但由于神岛对粒子个数的限制太小了………所以华丽的效果是实现不了了,就希望吉吉提高一下粒子显示个数啊!!!
SCS_user_LoeheodVOQhttps://shequ.codemao.cn/community/513465
https://shequ.codemao.cn/community/513744
之前我弄的
点赞0
评论
Ezra__做圆不一定要用参数方程,可以用圆的定义“在平面直角坐标系上所有与圆心距离是5的点集”来实现,
这样子似乎会简单一点(?
async function setP(...v) {
world.createEntity({
meshScale: [0, 0, 0],
bounds: new Box3Vector3(0.01, 0.01, 0.01),
position: v,
collides: false,
gravity: false,
particleSize: [4, 4, 4, 4, 4],
particleRate: 1,
particleLimit: 1,
})
}
async function setPRound(r, ...pr) {//r表示半径,p表示圆心坐标
let p = new Box3Vector3(...pr);
for (let x = p.x - r; x <= p.x + r; x++)
for (let y = p.y - r; y <= p.y + r; y++) {
if ((x - p.x) ** 2 + (y - p.y) ** 2 == r ** 2)
setP(x, y, p.z)
}
}
点赞0
评论
DDguan新突破!不过只能停留在猜想……因为神岛对粒子的限制太bt了
猜想:可以用粒子展示文字
首先是用k画板画一个很小的字
然后写一小点py获取黑色的坐标
from PIL import Image
# 打开图片
img = Image.open(r'C:\Users\Administrator\Downloads\hello.png')#替换成你自己图片的路径
# 获取像素数据
pixels = img.load()
list=[]
# 打印像素坐标和值
for i in range(img.size[0]): # 图片宽度
for j in range(img.size[1]): # 图片高度
if pixels[i,j]!=(0,0,0,0):
list.append([i,j])
print(f"Pixel value at ({i},{j}): {pixels[i,j]}")
print(list)
然后就能获取一个坐标的列表,在写一点小代码就行了……

但是神岛对粒子个数的限制顶多显示成这样

……
点赞0
评论