이 잘 알려지지 않은 자바스크립트 물리학 라이브러리는 제 마음을 사로잡았습니다!
7638 단어 gamedevrustjavascriptwebassembly
이제 내 고민은 끝난 것 같다. 새로운 경쟁자인 Rapier.rs가 등장합니다.
Rapier home
Rapier.rs는 javscript 바인딩과 좋은 문서로 WASM으로 컴파일된 녹슨 물리 라이브러리입니다. 약 30분 만에 설정할 수 있었고 앱 성능을 즉각적으로 크게 향상시켰습니다.
레이피어는 더 안정적이었고 수천 개의 더 많은 활성 물리체를 세계에 추가할 수 있었습니다.
연결:
활성체
물질 FPS
레이피어 FPS
4500
38
120
6000
21
79
7500
4
60
9000
0 - 충돌
42
10000
0 - 충돌
31
12000
0 - 충돌
22
15000
0 - 충돌
16
js 물리 요구 사항에 대해 Rapier를 고려해야 하는 이유
1. 성능
Javascript는 WASM으로 컴파일된 최적화된 Rust 라이브러리와 비교할 수 없습니다.
WASM is just this fast
2. 문서화
Rapier 페이지는 주요 기능에 대한 좋은 개요, 시작하는 방법에 대한 정보 및 심층 API 설명서를 제공합니다. 이 모든 것은 Rust, Rust+bevy 및 Javascript를 위한 것입니다.
3. 최신 개발자 경험
나는 Rapier API가 작업하기에 매우 직관적이라는 것을 알았고, 몇 안 되는 성능 중에서 단연코 최고의 선택이었습니다. 타이프 스크립트 지원과 함께 제공됩니다. 결과 코드는 읽기 쉽고 추론하기 쉽습니다.
import("@dimforge/rapier2d").then((RAPIER) => {
// Use the RAPIER module here.
let gravity = { x: 0.0, y: 9.81 };
let world = new RAPIER.World(gravity);
// Create the ground
let groundColliderDesc = RAPIER.ColliderDesc.cuboid(10.0, 0.1);
world.createCollider(groundColliderDesc);
// Create a dynamic rigid-body.
let rigidBodyDesc = RAPIER.RigidBodyDesc.newDynamic().setTranslation(
0.0,
1.0
);
let rigidBody = world.createRigidBody(rigidBodyDesc);
// Create a cuboid collider attached to the dynamic rigidBody.
let colliderDesc = RAPIER.ColliderDesc.cuboid(0.5, 0.5);
let collider = world.createCollider(colliderDesc, rigidBody.handle);
// Game loop. Replace by your own game loop system.
let gameLoop = () => {
// Step the simulation forward.
world.step();
// Get and print the rigid-body's position.
let position = rigidBody.translation();
console.log("Rigid-body position: ", position.x, position.y);
setTimeout(gameLoop, 16);
};
gameLoop();
});
4. 플랫폼 간 결정론 및 스냅샷 생성
world.takeSnapshot
로 전체 물리학 세계의 스냅샷을 찍을 수 있습니다. 그 결과 디스크에 저장하거나 네트워크를 통해 전송할 수 있는 Uint8Array 유형의 바이트 배열이 생성됩니다. 그런 다음 let world = World.restoreSnapshot(snapshot);
를 사용하여 스냅샷을 복원할 수 있습니다. 무엇 향후 계획?
나는 Rapier와 계속 일하게 되어 기쁘지만 그 사이에 적절한 물리학 벤치마크가 필요하다고 생각합니다. 내가 연구를 하면서 발견한 것들은 약간 오래된 것이었습니다.
기타: Vite 사용 오류
내 Vite 프로젝트에 Rapier를 추가하는 데 몇 가지 문제가 발생했습니다. 해결책은 여기에서 찾을 수 있습니다. https://github.com/dimforge/rapier.js/issues/49
Reference
이 문제에 관하여(이 잘 알려지지 않은 자바스크립트 물리학 라이브러리는 제 마음을 사로잡았습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jerzakm/this-little-known-javascript-physics-library-blew-my-mind-57oo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)