|
还没有账号?赶快去注册吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Harlotte 于 2024-5-6 21:20 编辑
关于随机摇晃、车轮转动、判断轨道类型、使用js完成音效播放的JS代码分享
https://www.mtrbbs.top/thread-6680-1-1.html
(出处: MTRBBS 我的世界铁路中文论坛)
上面是本贴的更新版本,请尽量参考上贴。
今天随便写了一个可动轮的代码和大家分享一下。
主要思路是一个在原点的轮子移动、旋转并带有一些简单的逻辑。
wheel文件中名为wheel的模型(上图)
简单的应用(上图)
列车是我这几天从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[entry.getKey()] = ModelManager.uploadVertArrays(entry.getValue());
- }
- return result;
- }
复制代码
|
|