-SDL- can you see what might be causeing no omage to get blitted?

Hopefully theres an obvious flaw, im been working on this ages, you might not need the header files but if you ask i will post them.

i hate it when theres no errors, harder to fix

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#include "sdl/sdl.h"
#include "load_image.h"
#include "applysurface.h"
#include "sdl/sdl_image.h"
#include "sdl/sdl_ttf.h"
#include "sdl/sdl_mixer.h"
#include "daegclips.h"
#include "timer.h"
const int DAEG_WIDTH = 300;
const int DAEG_HEIGHT = 700;
const int DAEG_RIGHT = 0;
const int DAEG_LEFT = 1;

const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGHT = 500;
const int SCREEN_BPP = 32;


const int FRAMES_PER_SECOND = 10;

SDL_Surface *DaegL = NULL;
SDL_Surface *DaegR = NULL;
SDL_Surface *screen = NULL;
SDL_Event event;

class daeg
{
private:


int Offset;
int velocity;
int frame;
int status;
public:
daeg ();

void handle_events()
{

    if( event.type == SDL_KEYDOWN )
    {

        switch( event.key.keysym.sym )
        {
            case SDLK_RIGHT: velocity += DAEG_WIDTH / 4; break;
            case SDLK_LEFT: velocity -= DAEG_WIDTH / 4; break;
            default:;
        }
    }

    else if( event.type == SDL_KEYUP )
    {

        switch( event.key.keysym.sym )
        {
            case SDLK_RIGHT: velocity -= DAEG_WIDTH / 4; break;
            case SDLK_LEFT: velocity += DAEG_WIDTH / 4; break;
            default:;
        }
    }
}
void throwcan ()
{
    if (velocity == 0)
    {
    if  (velocity == 0)
    {
    status = DAEG_LEFT;
    frame++;
    }
    else if (velocity == 0)
    {
    status = DAEG_RIGHT;
    frame++;
    }
   else
   {
       frame = 0;
   }
   if (frame >= 9)
   {
       frame =0;
   }
   if (status == DAEG_RIGHT)
    {
        apply_surface( Offset, SCREEN_HEIGHT - DAEG_HEIGHT, DaegR, screen, &clipsRightthrow[ frame ] );
    }
   if (status == DAEG_LEFT)
   {
        apply_surface( Offset, SCREEN_HEIGHT - DAEG_HEIGHT, DaegL, screen, &clipsLeftthrow[ frame ] );
   }
velocity = 0;
}
}

void move ()
{
Offset += velocity;
if ((Offset < 0)||(Offset+DAEG_WIDTH > SCREEN_WIDTH))
{
    Offset -= velocity;
}
}
void show()
{
    if  (velocity < 0)
    {
    status = DAEG_LEFT;
    frame++;
    }
    else if (velocity > 0)
    {
    status = DAEG_RIGHT;
    frame++;
    }
   else
   {
       frame = 1;
   }
   if (frame >= 9)
   {
       frame =1;
   }
   if (status == DAEG_RIGHT)
    {
        apply_surface( Offset, SCREEN_HEIGHT - DAEG_HEIGHT, DaegR, screen, &clipsRight[ frame ] );
    }
   if (status == DAEG_LEFT)
   {
        apply_surface( Offset, SCREEN_HEIGHT - DAEG_HEIGHT, DaegL, screen, &clipsLeft[ frame ] );
    }
}
};

daeg::daeg ()
{
Offset = 0;
velocity = 0;
frame = 0;
status = DAEG_RIGHT;

}


bool init()
{

    if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
    {
        return false;
    }

    screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );


    if( screen == NULL )
    {
        return false;
    }
    SDL_WM_SetCaption( "Daeg", NULL );
    return true;
}

bool load_image()
{
    DaegL = load_image( "daegclipsleft.png" );
    DaegR = load_image("daegclipsright.png");
    if( DaegL == NULL )
    {
        return false;
    }
    if(DaegR == NULL)
    {
        return false;
    }
    return true;
}

void clean_up()
{

    SDL_FreeSurface( DaegR );
    SDL_FreeSurface( DaegL );

    SDL_Quit();
}
int main( int argc, char* args[] )
{

    bool quit = false;

    if( init() == false )
    {
        return 1;
    }


    if( load_image() == false )
    {
        return 1;
    }
    set_clips();
    Timer fps;
    daeg walk;

    while( quit == false )
    {
    fps.start();
      while( SDL_PollEvent( &event ) )
        {
      walk.handle_events();
      if( event.type == SDL_QUIT )
            {

                quit = true;
            }
        }
      walk.move();
      SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0xFF, 0xFF, 0xFF ) );
      walk.show();
      if( SDL_Flip( screen ) == -1 )
        {
            return 1;
        }
       if( fps.get_ticks() < 1000 / FRAMES_PER_SECOND )
        {
            SDL_Delay( ( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() );
        }
    }
    clean_up();

    return 0;
}
Hard to tell exactly what the problem is just looking through that code.

I would suggest going through it step by step, does it work when you don't try and clip part of the image, does it work when you display the image at 0,0. Then narrow down the problem from there. (Or use debugging tools to check what each value is at certain times).

If nothing you do works you could try posting your entire project which might be easier to see an obvious flaw.
Last edited on
yeah might have to do that, will start tidying it back up again.
interestingly if i put an image to be blitted right under main nothing happens!
It looks like you have error checking for your image loading, so it may be an error with your apply_surface function?
i used this header before here it is; i doubt it

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
#include <iostream>
#include <cmath>
void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL )
{
    //Holds offsets
    SDL_Rect offset;

    //Get offsets
    offset.x = x;
    offset.y = y;

    //Blit
    SDL_BlitSurface( source, clip, destination, &offset );
}

]



and heres load image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SDL_Surface *load_image (std::string filename)
{
    SDL_Surface *loadedimage = NULL;
    SDL_Surface *optimizedimage = NULL;
    loadedimage = IMG_Load (filename.c_str());

    if (loadedimage !=NULL)
    {
        optimizedimage = SDL_DisplayFormat (loadedimage);
        if (optimizedimage != NULL);
        {
            SDL_SetColorKey (optimizedimage,SDL_SRCCOLORKEY,SDL_MapRGB(optimizedimage->format,0,0,0));
        }
    }
    return optimizedimage;
}
]

plenty of pointless headers too.
Last edited on
still suck, dont want to sleep till it works
Nothing looks too strange, want to send me the project file itself and I can take a look. Must be something strange happening.
sure thing i would love to could you advise on how??
If you are using visual studio there will be a project solution file (seeing as that's the only compiler I use). Otherwise you could probably put all the .h/.cpp files in a folder and upload them somewhere pretty quickly.
https://www.dropbox.com/sh/2l5wqo35qkvzkqt/N3FMi-BTeE

thar ye go, dont really know what i did there hope it works
Images seem to display correctly for me, the only problem I see is
SCREEN_HEIGHT - DAEG_HEIGHT

That displays images out of the screen (seeing as DAEG_HEIGHT is such a large number). If putting a different number there doesn't solve the problem then it must be something only on your side.
well that is odd, yeah i didnt finnish measuring up all the images, what with not being able to see them...what do you think it could be??
It if doesn't let you show an image anywhere I would try creating a simpler project and just trying to display an image to make sure you have it set up correctly, I am guessing the clipping is messing up your images somehow.
what could it be i have tried using every diferent size and shape clip!
What size is the images the images?

Many of the rectangles in clipsRight and clipsLeft have 0 size, and the others have very varying sizes to say the least.

You shouldn't have a semicolon at the end of line 10 in load_image.
i havnt been able to clip the pictures because i havnt seen them, those big numbers i have biin playing with in the hop of seeing a flash of something
If you don't pass the clip to apply_surface do you see the images?
no, i tried a lot of things to see any image at all, i think nothing is getting blitted, havnt tried a bmp, shud try that see what happens, the projects there peter if you want to put it together, i suspect now its a linker settings thing
Topic archived. No new replies allowed.