用户:
追梦ez查看:11 回复:21 评论:11 创建时间:2023-03-11T13:18:55
上期我们讲了如何做出鸡块旋转的效果
链接:https://shequ.codemao.cn/wiki/forum/530959
但是生成出来的鸡块并不能像MC里的掉落物一样可拾取
这期我就来教大家
如何做出像MC一样的拾取物品
这期代码需配合上期代码使用
附上上期代码:
var velocity=7
var velocity2=16
function spawn(x,y,z) {
const e = world.createEntity({
mesh: 'mesh/只因块.vb',
collides: true,
friction: 0,
scale: new Box3Vector3(2, 2, 2),
position: [x,y+1,z],
});
setInterval(() => {
e.meshOrientation.copy(e.meshOrientation.rotateY(Math.PI / 180))
}, velocity)
const startPos = [e.position.x, e.position.y + 0.3, e.position.z]
const endPos = [e.position.x, e.position.y, e.position.z]
const ani = e.animate([
{ position: startPos, duration: 1 },
{ position: endPos, duration: 1 },
], {
duration: velocity2 * 2,
iterations: 1,
direction: Box3AnimationDirection.WRAP,
})
ani.play({
duration: velocity2 * 2,
iterations: Infinity,
direction: Box3AnimationDirection.WRAP,
})
}
spawn(喵,8,喵 )
我这个方法可能会有一点点卡(真的就一点点,没喵),如果你的地图本身就很卡,有好多onTick那不建议使用
给经验添加标签
var velocity=7
var velocity2=16
function spawn(x,y,z) {
const e = world.createEntity({
mesh: 'mesh/只因块.vb',
collides: true,
friction: 0,
scale: new Box3Vector3(2, 2, 2),
position: [x,y+1,z],
});
e.addTag('jk')
setInterval(() => {
e.meshOrientation.copy(e.meshOrientation.rotateY(Math.PI / 180))
}, velocity)
const startPos = [e.position.x, e.position.y + 0.3, e.position.z]
const endPos = [e.position.x, e.position.y, e.position.z]
const ani = e.animate([
{ position: startPos, duration: 1 },
{ position: endPos, duration: 1 },
], {
duration: velocity2 * 2,
iterations: 1,
direction: Box3AnimationDirection.WRAP,
})
ani.play({
duration: velocity2 * 2,
iterations: Infinity,
direction: Box3AnimationDirection.WRAP,
})
}
spawn(喵,8,喵 )
再定个循环)
setInterval(() => {
},100)
不停判断所有玩家位置
setInterval(() => {
world.querySelectorAll('player').forEach(async (entity) => {
world.querySelectorAll('.jk').forEach(async (e) => {
if(Math.floor(entity.position.y)==Math.floor(e.position.y)){//如果鸡块和玩家在一层,也就是y坐标相等,那么执行以下代码
if(Math.floor(entity.position.x)==Math.floor(e.position.x)){//如果x坐标差不多
if(Math.floor(entity.position.z)==Math.floor(e.position.z)){//如果z坐标也差不多
}
}
}
})
})
},100)
最后给玩家提示就行啦
setInterval(() => {
world.querySelectorAll('player').forEach(async (entity) => {
world.querySelectorAll('.jk').forEach(async (e) => {
if(Math.floor(entity.position.y)==Math.floor(e.position.y)){//如果鸡块和玩家在一层,也就是y坐标相等,那么执行以下代码
if(Math.floor(entity.position.x)==Math.floor(e.position.x)){//如果x坐标差不多
if(Math.floor(entity.position.z)==Math.floor(e.position.z)){//如果z坐标也差不多
e.destroy()//消除鸡块
entity.player.directMessage('你获得了一个鸡块')//提示玩家
}
}
}
})
})
},100)
全部代码:
var velocity=7
var velocity2=16
function spawn(x,y,z) {
const e = world.createEntity({
mesh: 'mesh/只因块.vb',
collides: true,
friction: 0,
scale: new Box3Vector3(2, 2, 2),
position: [x,y+1,z],
});
e.addTag('jk')
setInterval(() => {
e.meshOrientation.copy(e.meshOrientation.rotateY(Math.PI / 180))
}, velocity)
const startPos = [e.position.x, e.position.y + 0.3, e.position.z]
const endPos = [e.position.x, e.position.y, e.position.z]
const ani = e.animate([
{ position: startPos, duration: 1 },
{ position: endPos, duration: 1 },
], {
duration: velocity2 * 2,
iterations: 1,
direction: Box3AnimationDirection.WRAP,
})
ani.play({
duration: velocity2 * 2,
iterations: Infinity,
direction: Box3AnimationDirection.WRAP,
})
}
spawn(喵,8,喵 )
setInterval(() => {
world.querySelectorAll('player').forEach(async (entity) => {
world.querySelectorAll('.jk').forEach(async (e) => {
if(Math.floor(entity.position.y)==Math.floor(e.position.y)){
if(Math.floor(entity.position.x)==Math.floor(e.position.x)){
if(Math.floor(entity.position.z)==Math.floor(e.position.z)){
e.destroy()
entity.player.directMessage('你获得了一个鸡块')
}
}
}
})
})
},100)
好了,以上就是本期教程的全部内容
如果你觉得对你有帮助的话,那就ddd
注:作者制作不易,copy请通知或标明出处o