用户:
guxia666查看:14 回复:15 评论:14 创建时间:2022-04-18T08:28:45
首先,大家要先了解如何做出这样的特效(tm这不是废话![]()
首先,彩虹发射特效=子弹发射代码+模型尾部彩虹特效
然后了解这一点就开始我们的代码![]()
对了这次的特效代码利用到了渐变特效(特效代码如下:
particleLimit: 30,
particleLifetime: 5,
particleRate: 30,
particleRateSpread: 30,
particleSize: [5, 3, 5, 3, 5],
particleColor: [
new Box3RGBColor(10, 0, 0),
new Box3RGBColor(0, 10, 0),
new Box3RGBColor(0, 0, 10),
], // 设置颜色(紫色)
particleVelocity: new Box3Vector3(0, 0, 0)
最后直接再写一个发射子弹代码就ok了
最后整体代码:
world.onPlayerJoin(({ entity }) => { //当玩家进入地图时
if (entity.player.name === '搬砖喵' || entity.player.name === '吉吉喵') {
entity.addTag('ghost') //本喵不受攻击
}
entity.enableDamage = true //允许这个玩家受伤
entity.id = entity.player.userKey//把userKey作为玩家的id
world.addCollisionFilter('#' + entity.id, '#' + entity.id)//让id跟玩家id一样的实体不会相互碰撞, 比如玩家的飞刀不会碰到玩家, 自己的飞刀之间也不会碰撞
})
world.addCollisionFilter('.ghost', '*')
world.onPlayerLeave(({ entity }) => { //当玩家离开地图时
world.removeCollisionFilter('#' + entity.id, '#' + entity.id)//取消这个玩家的碰撞过滤器
})
const SHANGHAI = [3, 5]//伤害随机数
const Quat = new Box3Quaternion(0, 0, 0, 1);//不懂得不是人(doge)
const DAO = [0.1 / 16, 0.1 / 16, 0.1 / 16] //正常的模型缩放比例
world.onPress(async ({ entity, button }) => {
if (button === 'action0' ) {
//彩虹特效(分为两部分:1.发射子弹代码[子弹用的是光球]2.尾部有彩虹特效粒子)
//以下部分实现的是发射子弹
const d = entity.player.facingDirection //玩家的朝向
const knife = world.createEntity({
mesh: 'mesh/光球.vb',
meshScale: DAO,
collides: true, // 开启碰撞
gravity: false, // 不受重力影响
position: entity.position, // 在玩家的位置生成飞刀
velocity: d.scale(2), // 飞刀的初速度是玩家朝向向量的2倍
meshOrientation: Quat.rotateY(Math.atan2(d.z, d.x)),
})
const caihongtexiao = [knife];
for (const e of caihongtexiao) {
Object.assign(
e, {
particleLimit: 30,
particleLifetime: 5,
particleRate: 30,
particleRateSpread: 30,
particleSize: [5, 3, 5, 3, 5],
particleColor: [
new Box3RGBColor(10, 0, 0),
new Box3RGBColor(0, 10, 0),
new Box3RGBColor(0, 0, 10),
], // 设置颜色(紫色)
particleVelocity: new Box3Vector3(0, 0, 0)
}
)
}
knife.id = entity.player.userKey //将小刀的id设置成玩家userKey, 便于碰撞过滤器识别
knife.onEntityContact(({ other }) => {//每当飞刀碰到另一个实体
other.hurt(SHANGHAI[Math.floor(Math.random() * SHANGHAI.length)])//被碰实体受随机伤害(这里的随机指3或5点伤害)
})
await sleep(2000)//等2秒后
knife.destroy()//清除模型, 防止模型数量太多超过服务器负载
}
})
当然如果让模型在不同时间切换不同的颜色效果会更好,这个就不演示了,就当作大家的作业了![]()
(小声bb这期没有那么水了吧(bushi)![]()
Robot一只屑代码师world.onPlayerJoin(({ entity }) => { //当玩家进入地图时
if (entity.player.name === '搬砖喵' || entity.player.name === '吉吉喵') {
entity.addTag('ghost') //本喵不受攻击
}
entity.enableDamage = true //允许这个玩家受伤
entity.id = entity.player.userKey//把userKey作为玩家的id
world.addCollisionFilter('#' + entity.id, '#' + entity.id)//让id跟玩家id一样的实体不会相互碰撞, 比如玩家的飞刀不会碰到玩家, 自己的飞刀之间也不会碰撞
})
world.addCollisionFilter('.ghost', '*')
world.onPlayerLeave(({ entity }) => { //当玩家离开地图时
world.removeCollisionFilter('#' + entity.id, '#' + entity.id)//取消这个玩家的碰撞过滤器
})
const SHANGHAI = [3, 5]//伤害随机数
const Quat = new Box3Quaternion(0, 0, 0, 1);//不懂得不是人(doge)
const DAO = [0.1 / 16, 0.1 / 16, 0.1 / 16] //正常的模型缩放比例
world.onPress(async ({ entity, button }) => {
if (button === 'action0' ) {
//彩虹特效(分为两部分:1.发射子弹代码[子弹用的是光球]2.尾部有彩虹特效粒子)
//以下部分实现的是发射子弹
const d = entity.player.facingDirection //玩家的朝向
const knife = world.createEntity({
mesh: 'mesh/光球.vb',
meshScale: DAO,
collides: true, // 开启碰撞
gravity: false, // 不受重力影响
position: entity.position, // 在玩家的位置生成飞刀
velocity: d.scale(2), // 飞刀的初速度是玩家朝向向量的2倍
meshOrientation: Quat.rotateY(Math.atan2(d.z, d.x)),
})
const caihongtexiao = [knife];
for (const e of caihongtexiao) {
Object.assign(
e, {
particleLimit: 30,
particleLifetime: 5,
particleRate: 30,
particleRateSpread: 30,
particleSize: [5, 3, 5, 3, 5],
particleColor: [
new Box3RGBColor(10, 0, 0),
new Box3RGBColor(0, 10, 0),
new Box3RGBColor(0, 0, 10),
], // 设置颜色(紫色)
particleVelocity: new Box3Vector3(0, 0, 0)
}
)
}
knife.id = entity.player.userKey //将小刀的id设置成玩家userKey, 便于碰撞过滤器识别
knife.onEntityContact(({ other }) => {//每当飞刀碰到另一个实体
other.hurt(SHANGHAI[Math.floor(Math.random() * SHANGHAI.length)])//被碰实体受随机伤害(这里的随机指3或5点伤害)
})
await sleep(2000)//等2秒后
knife.destroy()//清除模型, 防止模型数量太多超过服务器负载
}
})点赞0
评论
Robot一只屑代码师world.onPlayerJoin(({ entity }) => { //当玩家进入地图时
if (entity.player.name === '搬砖喵' || entity.player.name === '吉吉喵') {
entity.addTag('ghost') //本喵不受攻击
}
entity.enableDamage = true //允许这个玩家受伤
entity.id = entity.player.userKey//把userKey作为玩家的id
world.addCollisionFilter('#' + entity.id, '#' + entity.id)//让id跟玩家id一样的实体不会相互碰撞, 比如玩家的飞刀不会碰到玩家, 自己的飞刀之间也不会碰撞
})
world.addCollisionFilter('.ghost', '*')
world.onPlayerLeave(({ entity }) => { //当玩家离开地图时
world.removeCollisionFilter('#' + entity.id, '#' + entity.id)//取消这个玩家的碰撞过滤器
})
const SHANGHAI = [3, 5]//伤害随机数
const Quat = new Box3Quaternion(0, 0, 0, 1);//不懂得不是人(doge)
const DAO = [0.1 / 16, 0.1 / 16, 0.1 / 16] //正常的模型缩放比例
world.onPress(async ({ entity, button }) => {
if (button === 'action0' ) {
//彩虹特效(分为两部分:1.发射子弹代码[子弹用的是光球]2.尾部有彩虹特效粒子)
//以下部分实现的是发射子弹
const d = entity.player.facingDirection //玩家的朝向
const knife = world.createEntity({
mesh: 'mesh/光球.vb',
meshScale: DAO,
collides: true, // 开启碰撞
gravity: false, // 不受重力影响
position: entity.position, // 在玩家的位置生成飞刀
velocity: d.scale(2), // 飞刀的初速度是玩家朝向向量的2倍
meshOrientation: Quat.rotateY(Math.atan2(d.z, d.x)),
})
const caihongtexiao = [knife];
for (const e of caihongtexiao) {
Object.assign(
e, {
particleLimit: 30,
particleLifetime: 5,
particleRate: 30,
particleRateSpread: 30,
particleSize: [5, 3, 5, 3, 5],
particleColor: [
new Box3RGBColor(10, 0, 0),
new Box3RGBColor(0, 10, 0),
new Box3RGBColor(0, 0, 10),
], // 设置颜色(紫色)
particleVelocity: new Box3Vector3(0, 0, 0)
}
)
}
knife.id = entity.player.userKey //将小刀的id设置成玩家userKey, 便于碰撞过滤器识别
knife.onEntityContact(({ other }) => {//每当飞刀碰到另一个实体
other.hurt(SHANGHAI[Math.floor(Math.random() * SHANGHAI.length)])//被碰实体受随机伤害(这里的随机指3或5点伤害)
})
await sleep(2000)//等2秒后
knife.destroy()//清除模型, 防止模型数量太多超过服务器负载
}
})world.onPlayerJoin(({ entity }) => { //当玩家进入地图时
if (entity.player.name === '搬砖喵' || entity.player.name === '吉吉喵') {
entity.addTag('ghost') //本喵不受攻击
}
entity.enableDamage = true //允许这个玩家受伤
entity.id = entity.player.userKey//把userKey作为玩家的id
world.addCollisionFilter('#' + entity.id, '#' + entity.id)//让id跟玩家id一样的实体不会相互碰撞, 比如玩家的飞刀不会碰到玩家, 自己的飞刀之间也不会碰撞
})
world.addCollisionFilter('.ghost', '*')
world.onPlayerLeave(({ entity }) => { //当玩家离开地图时
world.removeCollisionFilter('#' + entity.id, '#' + entity.id)//取消这个玩家的碰撞过滤器
})
const SHANGHAI = [3, 5]//伤害随机数
const Quat = new Box3Quaternion(0, 0, 0, 1);//不懂得不是人(doge)
const DAO = [0.1 / 16, 0.1 / 16, 0.1 / 16] //正常的模型缩放比例
world.onPress(async ({ entity, button }) => {
if (button === 'action0' ) {
//彩虹特效(分为两部分:1.发射子弹代码[子弹用的是光球]2.尾部有彩虹特效粒子)
//以下部分实现的是发射子弹
const d = entity.player.facingDirection //玩家的朝向
const knife = world.createEntity({
mesh: 'mesh/光球.vb',
meshScale: DAO,
collides: true, // 开启碰撞
gravity: false, // 不受重力影响
position: entity.position, // 在玩家的位置生成飞刀
velocity: d.scale(2), // 飞刀的初速度是玩家朝向向量的2倍
meshOrientation: Quat.rotateY(Math.atan2(d.z, d.x)),
})
const caihongtexiao = [knife];
for (const e of caihongtexiao) {
Object.assign(
e, {
particleLimit: 30,
particleLifetime: 5,
particleRate: 30,
particleRateSpread: 30,
particleSize: [5, 3, 5, 3, 5],
particleColor: [
new Box3RGBColor(10, 0, 0),
new Box3RGBColor(0, 10, 0),
new Box3RGBColor(0, 0, 10),
], // 设置颜色(紫色)
particleVelocity: new Box3Vector3(0, 0, 0)
}
)
}
knife.id = entity.player.userKey //将小刀的id设置成玩家userKey, 便于碰撞过滤器识别
knife.onEntityContact(({ other }) => {//每当飞刀碰到另一个实体
other.hurt(SHANGHAI[Math.floor(Math.random() * SHANGHAI.length)])//被碰实体受随机伤害(这里的随机指3或5点伤害)
})
await sleep(2000)//等2秒后
knife.destroy()//清除模型, 防止模型数量太多超过服务器负载
}
})点赞0
评论