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

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.