Tôi đang cố gắng tìm cách xóa tất cả các đối tượng trong cảnh mà không phá hủy cảnh đó. Tôi biết rằng đặt tên đối tượng là một cách và sau đó khi chúng tôi muốn xóa đối tượng, chúng tôi chỉ "nhận" nó theo tên của nó. Tuy nhiên, tôi muốn tìm một cách nhanh chóng để xóa một cảnh của tất cả các đối tượng trong đó, bất kể tên của chúng. Có cách nào dễ dàng để làm điều đó không? Cảm ơn!Làm cách nào để xóa BA.JS Scene
Trả lời
Bạn có thể duyệt qua các đối tượng con của cảnh và xóa từng mục một.
scene.children.forEach(function(object){ scene.remove(object); });
Edit:
Như đã đề cập trong các ý kiến, câu trả lời ở trên là sai. Cách chính xác để xóa tất cả các đối tượng khỏi khung cảnh đang sử dụng vòng lặp for/while.
while(scene.children.length > 0){
scene.remove(scene.children[0]);
}
Lưu ý: Đây chỉ là một thanh toán bù trừ nhanh chóng và dơ bẩn của hệ thống phân cấp đối tượng. Nếu bạn có kế hoạch làm điều này rất nhiều bạn có nguy cơ chạy vào rò rỉ bộ nhớ với mã ở trên vì trình kết xuất có tham chiếu đến các vật liệu, kết cấu và hình học đối tượng. Một sạch hoàn toàn các cảnh phức tạp hơn và có rất nhiều câu hỏi khác mà đi vào chi tiết hơn:
Tôi có một ngắn gọn hơn cách làm điều này. Tôi nhận thấy rằng phương thức remove
của Object3D chấp nhận nhiều hơn một tham số để loại bỏ đối tượng. Điều này cho phép chúng tôi sử dụng toàn bộ mảng children
bằng cách sửa đổi cuộc gọi để sử dụng từng phần tử dưới dạng tham số riêng lẻ bằng cách tận dụng phương pháp tích hợp sẵn trong apply
cho các hàm. Điều này hoạt động như vậy:
scene.remove.apply(scene, scene.children);
Truyền tải tất cả trẻ em và gọi vứt bỏ trên hình, vật liệu và kết cấu của chúng. Mã dưới đây là giải pháp của tôi.
function clearThree(obj){
while(obj.children.length > 0){
clearThree(obj.children[0])
obj.remove(obj.children[0]);
}
if(obj.geometry) obj.geometry.dispose()
if(obj.material) obj.material.dispose()
if(obj.texture) obj.texture.dispose()
}
clearThree(scene)
- 1. Làm cách nào để lưu hình ảnh từ canvas Ba.js?
- 2. Làm cách nào để hiển thị cùng một cảnh với các máy ảnh khác nhau trong ba.js?
- 3. Xcode Scene Dock ẩn
- 4. Làm thế nào để hiển thị ShadowCamera trong ba.js r73?
- 5. Làm cách nào để xóa bóng khỏi các tab JavaFX?
- 6. Làm cách nào để chạy ba.js trong React Native (không có WebView)?
- 7. Làm cách nào để xóa cookie HttpOnly?
- 8. làm cách nào để xóa nút phụ
- 9. Làm cách nào để buộc xóa tệp?
- 10. Làm cách nào để xóa nhanh hơn?
- 11. Làm cách nào để xóa cookie?
- 12. JavaFX Scene Builder và fx: include
- 13. JavaFX: Thêm nút mới vào Scene trong mã java khi Scene ban đầu được tải từ FXML
- 14. es6 Nhập ba.js
- 15. cắt bóng ba.js
- 16. Làm thế nào để có được tất cả các nút con với tên trong Swift với Scene Kit
- 17. Cải thiện hiệu suất của các hình động trong ba.js
- 18. Bất kỳ cách nào để có được một hộp giới hạn từ một Object3D ba.js?
- 19. Làm thế nào để sử dụng nhiều tài liệu trong một khối ba.js?
- 20. Làm thế nào để có được vị trí tuyệt đối của một đỉnh trong ba.js?
- 21. Trong MySQL, làm cách nào để xóa/xóa/xóa tất cả nhật ký không cần thiết?
- 22. Làm thế nào để kết hợp hai hình học hoặc mắt lưới bằng cách sử dụng ba.js r71?
- 23. Kênh alpha không nhất quán trong ba.js
- 24. Làm cách nào để xóa các ký tự đặc biệt?
- 25. Làm cách nào để xóa một mục khỏi Tập hợp?
- 26. Làm cách nào để xóa luồng phản hồi của HttpListener?
- 27. Làm cách nào để xóa WWW khỏi url bằng mod_rewrite?
- 28. Làm cách nào để xóa một hàm Bash?
- 29. Làm cách nào để xóa không gian khỏi chuỗi?
- 30. iOS làm cách nào để xóa nút quay lại?
giải pháp này không chính xác, vì bạn đang lặp qua mảng được sửa đổi trong vòng lặp, vì vậy một số phần tử có thể bị bỏ qua (ví dụ: khi bạn có hai phần tử ở trẻ em), hãy thay thế bằng: '' 'while (scene) .children.length> 0) { scene.remove (scene.children [0]); } '' ' – Alleo