godotjs / godotjs/javascript

Collision Result GC Leading to Engine Crash in GodotJS

Open
#216 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
1.1k
Forks
80
PR merge metrics
No merged PRs in 30d

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)

Contributor guide

Open the contributing guide

Research direction

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.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, typescript
Domain
game-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.