关于可动车轮的简单教程和JS代码分享
本帖最后由 Harlotte 于 2024-5-6 21:20 编辑关于随机摇晃、车轮转动、判断轨道类型、使用js完成音效播放的JS代码分享
https://www.mtrbbs.top/thread-6680-1-1.html
(出处: MTRBBS 我的世界铁路中文论坛)
上面是本贴的更新版本,请尽量参考上贴。
今天随便写了一个可动轮的代码和大家分享一下。
主要思路是一个在原点的轮子移动、旋转并带有一些简单的逻辑。
https://image.hokubu.cn/i/2024/05/05/66370fafd225b.png
wheel文件中名为wheel的模型(上图)
https://image.hokubu.cn/i/2024/05/05/66370ff91c31b.png
简单的应用(上图)
列车是我这几天从rtm搬到mtr的df5g 原作者金色原野,已取得移植许可,过两天做完了会免费分享出来
这是我第一次写js,效率什么的可能不是最优,恳请多多批评指正。代码如下,欢迎各位尝试。
var rms = ModelManager.loadPartedRawModel(Resources.manager(), Resources.idRelative("wheel.obj"), null);
var models = uploadPartedModels(rms);
var pid=1.2 //轮子直径
var d=-0.446434; //轮子距原点纵轴距离
var s1=3.1358; //轮子距原点横距离1
var s2=1.80722; //轮子距原点横距离2
function create(ctx, state, train) {
state.r = 0;
state.speed = 0;
}
function render(ctx, state, train) {
if(train.speed()-state.speed>0){
if(train.isReversed()){
state.r = state.r - train.speed() / ( pid * Math.PI ) * 360 * Timing.delta() * 20;
}else{
state.r = state.r + train.speed() / ( pid * Math.PI ) * 360 * Timing.delta() * 20;
}
}else if(train.speed()-state.speed==0){
state.r = state.r;
}
for (let i = 0; i < train.trainCars(); i++) {
let mat = new Matrices();
mat.translate(0,d,0);
mat.translate(0,0,s1);
mat.pushPose();
mat.rotateX(state.r);
ctx.drawCarModel(models["wheel"], i, mat);
mat.popPose();
mat.translate(0,0,s2);
mat.pushPose();
mat.rotateX(state.r);
ctx.drawCarModel(models["wheel"], i, mat);
mat.popPose();
mat.translate(0,0,s2);
mat.pushPose();
mat.rotateX(state.r);
ctx.drawCarModel(models["wheel"], i, mat);
let mat2 = new Matrices();
mat2.translate(0,d,0);
mat2.translate(0,0,-s1);
mat2.pushPose();
mat2.rotateX(state.r);
ctx.drawCarModel(models["wheel"], i, mat2);
mat2.popPose();
mat2.translate(0,0,-s2);
mat2.pushPose();
mat2.rotateX(state.r);
ctx.drawCarModel(models["wheel"], i, mat2);
mat2.popPose();
mat2.translate(0,0,-s2);
mat2.pushPose();
mat2.rotateX(state.r);
ctx.drawCarModel(models["wheel"], i, mat2);
}
state.speed=train.speed();
}
function uploadPartedModels(rawModels) {
let result = {};
for (it = rawModels.entrySet().iterator(); it.hasNext(); ) {
entry = it.next();
entry.getValue().applyUVMirror(false, true);
result = ModelManager.uploadVertArrays(entry.getValue());
}
return result;
}
这个代码该放到哪里:L yomi 发表于 2024-5-5 15:42
这个代码该放到哪里
我想你理解了以后就会知道的 推荐阅读https://www.zbx1425.cn/nautilus/mtr-nte/#/js-train
页:
[1]