Collision Result GC Leading to Engine Crash in GodotJS
- 主要言語
- 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