Do I have to initialize all NPC monsters and terrain features for each screen at once.
You can, of course, nothing prevents you from doing this:
However, this depends on how large your levels and the trade-off is between loading time and delays during the game (for example, when loading the next screen).
I would suggest the following:
First: Themes
Create two threads that start simultaneously, which are responsible for the actual gameplay, and the other only for loading new terrain. The gameplay thread is the main thread and starts the loader stream to load new terrain data when the player moves to the next screen.
Second: reduction of the lag between one embossed and another
Avoid loading the next terrain as you type . Instead, you should (for the scroller) load the terrain to the left and load the terrain to the right of the current position. Thus, you do not need to save the entire level in memory at once, and at the same time, you will never encounter a delay when entering a neighboring landscape . This works well with the first paragraph.
It also fits perfectly with your requirement that NPC monsters in one terrain can "follow" you into the next terrain (if you did not kill them); with the warning that if a player goes through two screens in a row without NPC monsters passing through one, they cannot track you down; namely, how many of the parties that I played still work.
Also note that this means that when you start a level, you will have to load 2 or 3 territories at once (depending on whether you start on the edge or in the middle of the level), but afterwards you will only ever have to load one relief for times, because all you have to do is replace the current one with the neighboring one each time the player moves to the next location.
What is the best format / way to store what goes on each screen?
Serialize
Given that your chosen platform is Java, I would say that loading time is the most efficient way to store level data. Create classes that store level and object information in the Serializable interface.
If you select this option when you create the levels for the first time, you will either have to create special methods for hard coding each level, and then serialize them before loading the game; or you will need to create a level editor.
XML
This option significantly increases the load time compared to deserializing objects, but it is more reliable and, as easily, can make changes. This is probably the best option if your levels are not very difficult.
In fact, there is nothing that would prevent you from making a combination of both.