godotjs / godotjs/javascript

Collision Result GC Leading to Engine Crash in GodotJS

オープン
#216 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
C++
スター
1.1k
フォーク
80
PR マージ指標
30日以内にマージされた PR はありません

説明

### 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)

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
cpp, typescript
領域
game-dev
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
38/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。