Collision Result GC Leading to Engine Crash in GodotJS
- Langage dominant
- C++
- Étoiles
- 1.1k
- Forks
- 80
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
### Version
4.1-v0.0.20-20240906
### System information
Windows11
### Issue description
```ts
export default class TestScript extends godot.PhysicsBody2D {
collink: any;
_ready() {
this.set_physics_process(true); // Enable physics processing
}
_physics_process(delta: number): void {
let velocity = new godot.Vector2();
if (godot.Input.is_action_pressed("up")) velocity.y -= 1;
if (godot.Input.is_action_pressed("down")) velocity.y += 1;
if (godot.Input.is_action_pressed("left")) velocity.x -= 1;
if (godot.Input.is_action_pressed("right")) velocity.x += 1;
// Normalize velocity vector and scale by speed and delta time
if (velocity.length() > 0) {
velocity.x *= 5;
velocity.y *= 5;
// Update position and handle collisions
// Without storing the collision result, the object is garbage collected (GC)
// which leads to game crashes on subsequent collision checks
const res = this.move_and_collide(velocity, false, 0.08, true);
if (res) this.collink = res; // Store collision result to prevent GC
console.log('res', res);
}
}
}
```
### Steps to reproduce
Just testing the above code
### Minimal reproduction project (MRP)
[game.zip](https://github.com/user-attachments/files/17529435/game.zip)
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Start with the attached game.zip reproduction and run the TypeScript script around PhysicsBody2D.move_and_collide. Trace the GodotJS binding and collision-result lifetime, then repeatedly exercise the collision path without manually retaining res. Done means the reproduction no longer crashes during subsequent collision checks.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- cpp, typescript
- Domaine
- game-dev
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100