Repository: godot
Issue: Area2D body_entered signal is generated incorrectly if a body is moved prior to scene initialization
Labels: bug,topic:physics,topic:2d

### Godot version

3.4.4 and 3.3.4

### System information

Ubuntu 20.04 x86_64

### Issue description

## What doesn't work:
If a body is moved before a scene is loaded, body_entered will be generated even though the body is nowhere near the Area2D.

## How I expected it to work:
The scene would check where the body is when it loaded, and only emit the signal if the body was actually intersecting the area.



## What my tree looks like
```
Main
    KinematicPlayer
    Room2 (dynamically added)
        Room2_Area2D
        ...
    ...
```
## Controls:

Note: When I refer to 1,2,3, I mean the number keys 1, 2, and 3 on your keyboard. Not Keypad 1,2,3.
* <kbd>1</kbd> : Reload scene (don't move)
* <kbd>2</kbd> : Move player (toggle between position A and B)
* <kbd>3</kbd> : Move player, then reload scene

## Context / Why this is important:
- I use something like this to handle moving from one "room" to another, I found that sometimes when moving to a room it would mysteriously trigger the Area2D to go to a different room immediately upon entry.
- I move the player before loading the scene because a room might have more than one entrance, e.g., if they entered a room from a door to the left I'll want to put them in front of that door.
- I ran into this trying to follow the advice of the docs: https://docs.godotengine.org/en/stable/tutorials/best_practices/scene_organization.html#choosing-a-node-tree-structure , it felt like a good code decision to leave the player node outside of the scene instead of recreating it / deleting it every time a room changed.

## References

This is possibly related to #14578 but that issue talks about changing node parents, there is no node reparenting happening here. 
- The player node does not change its position, it remains as a child of the Main scene node
- The only node that changes is the "Room" node getting deleted and re-added.
- I commented on that issue but after playing with this more I'm not really sure it's the same issue.

## Workarounds

This is not a great workaround but dropping the signal system for body_entered and using `_process(delta)` with `Area2D.get_overlapping_bodies()` does work as expected, and does not find "ghost bodies".

At the moment I'm early enough in my project that I can change to some other system of going between rooms.

## What it isn't
- The Area2D isn't getting moved / stretched / warped, its position and extents stay constant
- The player isn't in the wrong place when the scene loads or when the body_entered event happens
- It's not a coordinate space issue. The coordinate space of the player never changes, the player is not a child of the loaded room scene, they're both children of the root "Main" node.

## Extra rambling
- I vaguely remember somebody saying in one of the issue threads that the root cause of this might be the body being placed at (0,0) for a frame while the scene is loaded. In a previous revision of this project I tested that but I don't think this is the case. In that test project I had the player change between two rooms, with a big Area2D rectangle centered at (0,0), and the player being at (-100, -100) in one room and (100,100) in the other room. The body entered signal never fired (as expected) regardless of whether I moved the player before or after loading the scene.
- Somebody else mentioned that this might be a race condition in _process/_physics_process but it's reproducible 100% of the time.

## My guess as to why this is happening

My (wild) guess is that maybe there's some kind of signal caching / queue-ing going on?

### Steps to reproduce

Note: When I refer to 1,2,3, I mean the number keys 1, 2, and 3 on your keyboard. Look at the output to see when a body_entered event fires.

1. Start the project, note that the player is at position A
2. Hit 1, note that no body_entered events fire just from reloading the scene (as expected)
3. Hit 2, to move the player to PositionB, note that the body_entered signal is emitted because the kinematic body (labeled "player") is now intersecting Area2D
4. Hit 1 to reload the scene, note that body_entered signals fire every time you do this (this is OK)
5. Hit 2 again to move the player back to Position A, note that no body_entered signal is emitted (as expected)
6. Hit 3 to move the player to position B and reload the scene, note that a body_entered signal is emitted (as expected)
7. Hit 3 again to move the player to position A and reload the scene, note that a body_entered signal is emitted even though the player is nowhere near the Area's extents. This is the bug I'm reporting. 

Step 7 produces this output:
```
Player moved to (-100, -100)
Changing scene to res://Room2.tscn
Room2_Area2D_body_entered, intersecting body is at (-100, -100) my position is (74.692101, 96.940903) my extents are (35.8983, 24.1007)
```

Carefully note the order of events: 
1. The player got moved *out of the Area*
2. The scene changed
3. *After the scene loaded* the event fired, even though the player has not moved since the scene changed

### Minimal reproduction project
[NodeParentArea2DFalseTrigger.zip](https://github.com/godotengine/godot/files/8810357/NodeParentArea2DFalseTrigger.zip)