mirror of
https://github.com/Ukendio/jecs.git
synced 2025-04-24 17:10:03 +00:00
94 lines
No EOL
2.8 KiB
Markdown
94 lines
No EOL
2.8 KiB
Markdown
# Frequently Asked Questions
|
|
|
|
This section addresses common questions about jecs.
|
|
|
|
## General Questions
|
|
|
|
### What is jecs?
|
|
|
|
jecs is a high-performance Entity Component System (ECS) library for Luau/Roblox.
|
|
|
|
### How does jecs compare to other ECS libraries?
|
|
|
|
jecs uses an archetype-based storage system (SoA) which is more cache-friendly than traditional approaches. For a detailed comparison with Matter, see the [Migration from Matter](../migration-from-matter.md) guide.
|
|
|
|
### Can I use jecs outside of Roblox?
|
|
|
|
Yes, jecs can be used in any Lua/Luau environment as it has zero dependencies.
|
|
|
|
## Technical Questions
|
|
|
|
### How many entities can jecs handle?
|
|
|
|
jecs can handle up to 800,000 entities at 60 frames per second.
|
|
|
|
### What are archetypes?
|
|
|
|
Archetypes are groups of entities that have the exact same set of components. When you add or remove components from an entity, it moves to a different archetype.
|
|
|
|
### How do I optimize performance with jecs?
|
|
|
|
- Group entity operations to minimize archetype transitions
|
|
- Use cached queries for frequently accessed data
|
|
- Define components that are frequently queried together
|
|
- Use tags instead of empty tables
|
|
- Be mindful of archetype transitions
|
|
|
|
### What are relationship pairs?
|
|
|
|
Relationship pairs allow you to create connections between entities using the `pair()` function.
|
|
|
|
## Common Issues
|
|
|
|
### My entity disappeared after adding a component
|
|
|
|
Check if you have cleanup policies set up with `OnDelete` or `OnDeleteTarget`.
|
|
|
|
### Queries are returning unexpected results
|
|
|
|
Make sure you're querying for the exact components you need. Use modifiers like `.with()` or `.without()` to refine queries.
|
|
|
|
### Performance degrades over time
|
|
|
|
This could be due to:
|
|
- Memory leaks from not properly deleting entities
|
|
- Excessive archetype transitions
|
|
- Too many entities or components
|
|
- Inefficient queries
|
|
|
|
### How do I debug entity relationships?
|
|
|
|
Use the `Name` component to give entities meaningful names:
|
|
|
|
```lua
|
|
-- Print all parent-child relationships
|
|
for entity, target in world:query(jecs.pair(jecs.ChildOf, jecs.Wildcard)) do
|
|
print(world:get(entity, jecs.Name), "is a child of", world:get(target, jecs.Name))
|
|
end
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### When should I use component lifecycle hooks?
|
|
|
|
Use lifecycle hooks (`OnAdd`, `OnRemove`, `OnSet`) for:
|
|
- Initializing resources
|
|
- Cleaning up resources
|
|
- Reacting to data changes
|
|
|
|
### How should I structure my ECS code?
|
|
|
|
- Separate data (components) from behavior (systems)
|
|
- Keep components small and focused
|
|
- Design systems for specific component combinations
|
|
- Use relationships to model connections
|
|
- Document cleanup policies
|
|
|
|
### Should I use multiple worlds?
|
|
|
|
Multiple worlds are useful for:
|
|
- Separating client and server logic
|
|
- Creating isolated test environments
|
|
- Managing different game states
|
|
|
|
Component IDs may conflict between worlds if not registered in the same order. |