Hi again,
I'm working around 2 weeks with JoEngine and I think that is a good framework to develop games for SS, I Like it and I think that it's so easy to use.
I've just been using BennuGD port for Dreamcast and I leave it for all problems with the audio and the Ram memory management.
When I began with JoEngine, I decide first do
some test divided in output text, audio test, gamepad test, image/sprite test and save/load state test, so I try to
merge all in the same project divided in screens, something very simple.
Each screen has its owns image background, vars, functionalities, messages, etc.
I did the output text screen with and background image, some text like date, autor, description, etc.
I'm doing the
3th screen that represents the display of
sprite/images with animations, sprites, backgrounds etc.
Well,
In this point I'm begin having problems with the game.
The first thing that I detect was that some text were not show and the game stops in the first screen (It worked properly before I made the 3th screen).
This happened when I load one more sprite in the game and I assign this to a jo_img var. I tried free the memory and remove from memory all images that I don't use but I don't know really how to do it.
I think that it's possible that I'm loading all images and sprite in the wrong way or something that I'm doing with this images not is correct, for example:
As I say,
each screen has its own background image. I'm doing this with this piece of code added in the core with
jo_core_add_callbackvoid SetBackgroundByScreen()
{
jo_img imgBackground;
imgBackground.width = 320;
imgBackground.height = 240;
switch (currentScreen)
{
case SCREEN_MAIN:
if(!enableBackground) { break; }
enableBackground = true;
imgBackground.data = (unsigned short *)BG1;
jo_clear_background(JO_COLOR_Black);
jo_set_background_sprite(&imgBackground, 0, 0);
jo_free_img(&imgBackground);
break;
case SCREEN_OUTP:
if(!enableBackground) { break; }
enableBackground = true;
imgBackground.data = (unsigned short *)BG2;
jo_clear_background(JO_COLOR_Black);
jo_set_background_sprite(&imgBackground, 0, 0);
jo_free_img(&imgBackground);
break;
case SCREEN_SPRI:
/* TODO*/
default:
enableBackground = false;
imgBackground.data = JO_NULL;
break;
}
}
void jo_main(void)
{
jo_core_init(JO_COLOR_Black);
jo_core_add_callback(SetBackgroundByScreen);
jo_core_run();
}
And in the screen 3, I'm loading some sprites (five in particular) with this piece of code:
void s_LoadSprites()
{
static int sprLoaded = 0;
/*
load only once time
sprLoading1st it's a global var
*/
if(sprLoaded == 1)
{
return;
}
sprLoading1st.width = 48;
sprLoading1st.height = 48;
/*sprite 1*/
sprLoading1st.data = (unsigned short *)sprLoading1;
idSprLoading1st = jo_sprite_add(&sprLoading1st);
sprLoading1st.data = JO_NULL;
/*sprite 2*/
sprLoading1st.data = (unsigned short *)sprLoading2;
jo_sprite_add(&sprLoading1st);
sprLoading1st.data = JO_NULL;
/*sprite 3*/
sprLoading1st.data = (unsigned short *)sprLoading2;
jo_sprite_add(&sprLoading1st);
sprLoading1st.data = JO_NULL;
/*sprite 4*/
sprLoading1st.data = (unsigned short *)sprLoading4;
jo_sprite_add(&sprLoading1st);
sprLoading1st.data = JO_NULL;
animSprLoading1st = jo_create_sprite_anim(idSprLoading1st, 4, 2);
jo_start_sprite_anim_loop(animSprLoading1st);
/*sprite 5*/
sprLoading1st.width = 24;
sprLoading1st.height = 40;
sprLoading1st.data = (unsigned short *)sprKen01;
sprLoading1st.data = JO_NULL;
sprLoaded = 1;
}
I must point out that
the images are hardcore loaded. I was create it with the
JoMapEngine and
ported to C and included in the code.
At this point the game doesn't run. I have to remove several image/sprite loads for the game to work.
So please, I need help! What I'm doing wrong? How can I remove images and sprites and liberate it from ram? This is the real problem?
Regards,