用户:
迷失冷光查看:10 回复:10 评论:10 创建时间:2022-01-02T18:01:51
最紧看论坛大家都在聊游戏八卦段子和岛民们的爱恨情仇 那我就来毁一波气氛吧 ———————————————————————————————————————————— 介个特效呢我用这个模型: (模型链接:https://box3.fun/v/124396) 然后要做两条龙绕着一个球滚动的特效 不说多了,直接上代码 constQuat=newBox3Quaternion(0,0,0,1);//初始旋转 world.onPress(({entity,button,raycast:{direction}/*懒得多写,demo好用*/})=>{//点击事件 if(button==='action0'){//不懂非人 constball=world.createEntity({ mesh:'mesh/火球.vb', position:entity.position, gravity:false, collides:false, fixed:true, }) constdragon_1=world.createEntity({ mesh:'mesh/黄金龙首.vb', gravity:false, collides:false, fixed:true, meshScale:[0.0625,0.0625,0.0625], }) constdragon_2=world.createEntity({ mesh:'mesh/黄金龙首.vb', gravity:false, collides:false, fixed:true, meshScale:[0.0625,0.0625,0.0625], }) constup=Math.atan2(direction.y,Math.sqrt(direction.x**2+direction.z**2));//仰角 constangle=Math.atan2(direction.z,direction.x); conststartTick=world.currentTick;//发射事件 dragon_1.lastPosition=dragon_2.lastPosition=newBox3Vector3(0,0,0);//不用管它,设几都一样 constdragons=[dragon_1,dragon_2];//冷光偷懒 constradius=3;//旋转半径 for(consteofdragons){//API玩家输入信息的demo Object.assign(e,{ particleRate:100, particleLifetime:20, particleSize:[8,6,4,2,0.5], particleColor:[ newBox3RGBColor(1,1,0), newBox3RGBColor(1,1,0), newBox3RGBColor(1,0,0), newBox3RGBColor(1,0,0), newBox3RGBColor(1,1,1), ] }) } constticker=world.onTick(()=>{//如果不能cancel就用clock.js(不是所有人都懂) if(world.currentTick-startTick>200){//超时销毁 ball.destroy(); dragon_1.destroy(); dragon_2.destroy(); ticker.cancel();//统统删掉=) } ball.velocity=dragon_1.velocity=dragon_2.velocity=direction.scale(3); //谁也不懂 dragon_1.position=ball.position.add({ x:Math.cos(angle+Math.PI*0.5)*Math.cos(up+world.currentTick*0.3)*radius, y:Math.sin(up+world.currentTick*0.3)*radius, z:Math.sin(angle+Math.PI*0.5)*Math.cos(up+world.currentTick*0.3)*radius, }) dragon_2.position=ball.position.add({ x:Math.cos(angle+Math.PI*0.5)*Math.cos(up+world.currentTick*0.3+Math.PI)*radius, y:Math.sin(up+world.currentTick*0.3+Math.PI)*radius, z:Math.sin(angle+Math.PI*0.5)*Math.cos(up+world.currentTick*0.3+Math.PI)*radius, }) for(consteofdragons){ constdirection=e.position.sub(e.lastPosition); e.meshOrientation=Quat.rotateY(Math.PI*0.5).rotateX(Math.atan2(direction.y,Math.sqrt(direction.x**2+direction.z**2))).rotateY(Math.atan2(direction.z,direction.x)); e.lastPosition.copy(e.position); } }) } }) 看着有些奇怪 不过是俩条龙绕着一个球转就对了 GIF效果图要处理好久 就懒得弄了)
不爱做跑酷冷光,你能不能在2月三日时上武器试验场的空岛,让我们痛痛快快的打吉吉?求求了!imgsr喵demao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E6%BA%9C%E4%BA%86%E6%BA%9C%E4%BA%86.gif"alt="emotion_编程猫_哀求"
点赞0
评论
想不出来叫什么const Quat = new Box3Quaternion(0, 0, 0, 1);
world.onPress(({ entity, button, raycast: { direction }}) => {
if (button === 'action0') {
const ball = world.createEntity({
mesh: 'mesh/火球.vb',
position: entity.position,
gravity: false,
collides: false,
fixed: true,
})
const dragon_1 = world.createEntity({
mesh: 'mesh/黄金龙首.vb',
gravity: false,
collides: false,
fixed: true,
meshScale: [0.0625, 0.0625, 0.0625],
})
const dragon_2 = world.createEntity({
mesh: 'mesh/黄金龙首.vb',
gravity: false,
collides: false,
fixed: true,
meshScale: [0.0625, 0.0625, 0.0625],
})
const up = Math.atan2(direction.y, Math.sqrt(direction.x ** 2 + direction.z ** 2));
const angle = Math.atan2(direction.z, direction.x);
const startTick = world.currentTick;
dragon_1.lastPosition = dragon_2.lastPosition = new Box3Vector3(0, 0, 0);
const dragons = [dragon_1, dragon_2];
const radius = 3
for (const e of dragons) {
Object.assign(
e, {
particleRate: 100,
particleLifetime: 20,
particleSize: [8, 6, 4, 2, 0.5],
particleColor: [new Box3RGBColor(1, 1, 0), new Box3RGBColor(1, 1, 0), new Box3RGBColor(1, 0, 0), new Box3RGBColor(1, 0, 0), new Box3RGBColor(1, 1, 1),]
}
)
}
const ticker = world.onTick(() => {
if (world.currentTick - startTick > 200) {
ball.destroy();
dragon_1.destroy();
dragon_2.destroy();
ticker.cancel();
}
ball.velocity = dragon_1.velocity = dragon_2.velocity = direction.scale(3);
dragon_1.position = ball.position.add({
x: Math.cos(angle + Math.PI * 0.5) * Math.cos(up + world.currentTick * 0.3) * radius,
y: Math.sin(up + world.currentTick * 0.3) * radius, z: Math.sin(angle + Math.PI * 0.5) * Math.cos(up + world.currentTick * 0.3) * radius,
})
dragon_2.position = ball.position.add({
x: Math.cos(angle + Math.PI * 0.5) * Math.cos(up + world.currentTick * 0.3 + Math.PI) * radius,
y: Math.sin(up + world.currentTick * 0.3 + Math.PI) * radius,
z: Math.sin(angle + Math.PI * 0.5) * Math.cos(up + world.currentTick * 0.3 + Math.PI) * radius,
})
for (const e of dragons) {
const direction = e.position.sub(e.lastPosition);
e.meshOrientation = Quat.rotateY(Math.PI * 0.5).rotateX(Math.atan2(direction.y, Math.sqrt(direction.x ** 2 + direction.z ** 2))).rotateY(Math.atan2(direction.z, direction.x));
e.lastPosition.copy(e.position);
}
})
}
})点赞0
评论