Ok, I'm working on a platform shooter, and the edges of my graphics are a little pixelated, so, as I did in a backgammon game I wrote not too long ago, I'm using a function that creates an "anti-aliased" sprite by merging the real sprite with a separate alpha channel (same shape, but black and white with blurred edges). Below is almost exactly the same function I used for my backgammon game, however this one keeps giving me my sprite rendered as a black box.
I don't know what's going on. Masked draw is simply a call to masked blit. Is there something I'm missing? I've scoured my backgammon code and can't figure out what's going on. It would help if I actually understood what's going on with the transparency stuff, but it's not a necessity I don't guess.
I tried making a call to set_alpha_blender() before printing and even calling draw_trans_sprite() but that didn't work either. Any help would be wonderful, either in fixing my problem or suggesting a better way to do what I'm trying to do. I AM fairly new to game programming and could use all the help I can get.
Thanks
--Wes
| 1 | |
| 2 | void main() |
| 3 | { |
| 4 | /*MAIN STUFF*/ |
| 5 | daggy[0] = makeMasked("data/images/daggy_sprite.bmp","data/images/daggy_alpha.bmp", 128); |
| 6 | daggy[1] = makeMasked("data/images/daggy_sprite2.bmp","data/images/daggy_alpha2.bmp", 128); |
| 7 | |
| 8 | CSprite playerCharacter(daggy,1,0,0,0,0,0,100,100,0); |
| 9 | FixPlatformCollision(playerCharacter,background); |
| 10 | playerCharacter.update(); |
| 11 | FixBoundsCollisions(playerCharacter); |
| 12 | |
| 13 | playerCharacter.masked_draw(buffer); |
| 14 | |
| 15 | blit(buffer,screen,0,0,0,0,SCREENW,SCREENH); |
| 16 | while(!key[KEY_ESC}){} |
| 17 | /*MAIN STUFF*/ |
| 18 | } |
| 19 | END_OF_MAIN(); |
| 20 | |
| 21 | BITMAP* makeMasked(char* image_file, char* alpha_file, int alpha) |
| 22 | { |
| 23 | BITMAP *tempPiece; |
| 24 | BITMAP *sprite; |
| 25 | int c, a; |
| 26 | |
| 27 | tempPiece = load_bitmap(image_file,NULL); |
| 28 | sprite = load_bitmap(alpha_file,NULL); |
| 29 | |
| 30 | drawing_mode(DRAW_MODE_TRANS, NULL, 0, 0); |
| 31 | set_write_alpha_blender(); |
| 32 | |
| 33 | for (int y=0; y<sprite->h; y++) { |
| 34 | for (int x=0; x<sprite->w; x++) { |
| 35 | c = getpixel(sprite, x, y); |
| 36 | a = getr(c) + getg(c) + getb(c); |
| 37 | a = MID(0, a/2-alpha, 255); |
| 38 | putpixel(tempPiece, x, y, a); |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0); |
| 43 | |
| 44 | destroy_bitmap(sprite); |
| 45 | return tempPiece; |
| 46 | } |
I'm just taking a wild guess here, but stick in a couple lines in the program to save the masked bitmaps to .tga files, then make a little allegro utility to display these and call getpixel() on mouse clicks to display the rgba values.