Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 2.

Конвертация Ammo.js в ES6-модуль для использования с Rollup на JavaScript

Запись от 8Observer8 размещена 22.11.2022 в 19:53

Сделано на основе этого решения, то есть этой демки и этого кода.

Решение такое - в файле ammo.js нужно удалить следующий код:



Пример на Rollup выводящий значение гравитации

Для работы примера нужно глобально установить следующие модули командой: "npm i -g rollup broserify uglify-js" Команда "npm run dev" запустит Rollup в режиме отладки, в котором Rollup будет ждать изменения в файлах проекта, а в браузере можно будет ставить точки останова. Команда "npm run release" создаст файл bundle.js с помощью Browserify, а Uglify сожмёт этот файл.

public/index.html

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
 
<body>
    <script type="importmap">
        {
            "imports": {
                "ammo-es": "https://dl.dropboxusercontent.com/s/1os9vvoo1pa3ajk/ammo-es.js"
            }
        }
    </script>
 
    <script type="module" src="./js/bundle.js"></script>
</body>
 
</html>
src/main.js

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import AmmoLib from "ammo-es";
 
let Ammo, physicsWorld;
 
function setupPhysicsWorld() {
    const collisionConfiguration = new Ammo.btDefaultCollisionConfiguration();
    const dispatcher = new Ammo.btCollisionDispatcher(collisionConfiguration);
    const overlappingPairCache = new Ammo.btDbvtBroadphase();
    const solver = new Ammo.btSequentialImpulseConstraintSolver();
 
    physicsWorld = new Ammo.btDiscreteDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfiguration);
    physicsWorld.setGravity(new Ammo.btVector3(0, -10, 0));
}
 
function animationLoop() {
    const gravity = new Ammo.btVector3(0, -10, 0);
    console.log(`Gravity: (${gravity.x()}, ${gravity.y()}, ${gravity.z()})`);
    // requestAnimationFrame(animationLoop);
}
 
function init() {
    AmmoLib().then((re) => {
        Ammo = re;
        setupPhysicsWorld();
        animationLoop();
    });
}
 
init();
rollup.config.js

Javascript
1
2
3
4
5
6
export default {
    input: "./src/main.js",
    output: {
        file: "public/js/bundle.js"
    }
}
package.json

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
```
{
  "name": "ammo-es-module-rollup-js",
  "version": "1.0.0",
  "description": "",
  "main": "rollup.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "rollup -cwm",
    "del-bundle-map": "del /f /q /s .\\public\\js\\bundle.js.map",
    "bundle": "rollup -cm",
    "minify": "uglifyjs public/js/bundle.js -o public/js/bundle.js",
    "release": "npm run bundle && npm run minify && npm run del-bundle-map"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
Вложения
Тип файла: zip ammo-es-module-rollup-js.zip (3.9 Кб, 35 просмотров)
Тип файла: zip ammo-es.zip (434.0 Кб, 32 просмотров)
Размещено в Без категории
Показов 323 Комментарии 0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru