This was a somewhat interesting question since i've never tried changing the color key in loop so i did a quick test.
From what it appears is that once you set the color key all images that are loaded are assigned that color key, but if you change the color key then it will only be assigned to any new images loaded after that. The thing i liked was that even though the color key changed all the images that were loaded with the previous color key retain that color key.
here is the quick test program i made...
#include "DarkGDK.h"
void DarkGDK ( void )
{
// Display / Misc. Setup //
dbSyncOn();
dbSyncRate(0);
dbSetDisplayMode(800, 600, 16);
dbSetWindowOn();
dbSetImageColorKey(255, 0, 255);
dbLoadImage("test1.bmp", 1, 1);
dbLoadImage("test2.bmp", 2, 1);
// Main Loop //
while(LoopGDK())
{
dbCLS(dbRGB(128, 0, 0));
dbPasteImage(1, 0, 0, 1);
dbPasteImage(2, 0, 32, 1);
if(dbSpaceKey() && !dbImageExist(3) && !dbImageExist(4)){
dbSetImageColorKey(0, 0, 0);
dbLoadImage("test1.bmp", 3, 1);
dbLoadImage("test2.bmp", 4, 1);
}
if(dbImageExist(3) && dbImageExist(4)){
dbPasteImage(3, 32, 0, 1);
dbPasteImage(4, 32, 32, 1);
}
dbSync();
}
return;
}
... theres 2 images test1.bmp with a magenta(255, 0, 255) background and test2.bmp with a black background.
As to your collision system, you should be able to make it work without changing the transparent color. I'm not exactly sure how your doing it so i cant really give any more help, though if you posted some of what your working on i'm sure someone could give you a nudge in the right direction.