Hallo
ich beschäftige mich noch nicht sehr lange mit c++ ( ca 2 Jahre).
zurzeit versuche ich mit einem freund ein 2D spiel zu programmieren
Dabei habe ich folgendes problem:
Ich habe ein BITMAP 50*75 pixel in welchem ein Laserschwert ist.
nun soll ein anderer schuss mit diesem laserschwert kolidieren.
Dafür benutze ich folgenden code:
int Collision(BITMAP *bitmap1, int coorx_1, int coory_1, BITMAP *bitmap2, int coorx_2, int coory_2)
{
int rect1_x, rect1_y; /* the coordinates of the rectangle of */
int rect2_x, rect2_y; /* overlap of the bitmaps' bounding boxes */
int i, j, k, l;
int mask1, mask2;
/* We start by checking if the bitmaps' bounding boxes overlap. */
/* In x: */
if (coorx_1 + bitmap1->w <= coorx_2 || coorx_1 >= coorx_2 + bitmap2->w)
return 0;
/* In y: */
if (coory_1 + bitmap1->h <= coory_2 || coory_1 >= coory_2 + bitmap2->h)
return 0;
/* Right, now that we know the bounding boxes overlap,
* we need to determine the four corners of the overlap area.
*/
/* We'll handle the x-coordinates first... */
if (coorx_1 < coorx_2) {
rect1_x = coorx_2;
if (coorx_1 + bitmap1->w >= coorx_2 + bitmap2->w)
rect2_x = coorx_2 + bitmap2->w;
else
rect2_x = coorx_1 + bitmap1->w;
}
else {
rect1_x = coorx_1;
if (coorx_2 + bitmap2->w >= coorx_1 + bitmap1->w)
rect2_x = coorx_1 + bitmap1->w;
else
rect2_x = coorx_2 + bitmap2->w;
}
/* ...and now the y-coordinates. */
if (coory_1 < coory_2) {
rect1_y = coory_2;
if (coory_1 + bitmap1->h >= coory_2 + bitmap2->h)
rect2_y = coory_2 + bitmap2->h;
else
rect2_y = coory_1 + bitmap1->h;
}
else {
rect1_y = coory_1;
if (coory_2 + bitmap2->h > coory_1 + bitmap1->h)
rect2_y = coory_1 + bitmap1->h;
else
rect2_y = coory_2 + bitmap2->h;
}
mask1 = bitmap_mask_color(bitmap1);
mask2 = bitmap_mask_color(bitmap2);
for (i = rect1_x - coorx_1, j = rect1_x - coorx_2; i < rect2_x - coorx_1; i++, j++) {
for (k = rect1_y - coory_1, l = rect1_y - coory_2; k < rect2_y - coory_1; k++, l++) {
if (getpixel(bitmap1, i, k) != mask1 && getpixel(bitmap2, j, l) != mask2)
return 1;
}
}
return 0;
}
Dieser Code funktioniert zwar einwandfrei, bezieht sich aber immer auf die Original Bitmaps und nicht auf die Nachträglich geänderten.Wie kann ich dieses problem lösen?
PS hir meine einbindung des codes:
rotate_sprite(bmplaser,g_Yoda.Laser_normal,0,0 ,g_Yoda.winkel);
....
if(Collision(g_Yoda.Laser_normal,512-25,384-37,schuss1.sprite,x-schuss1.x,y-schuss1.y) == 1)
{
....
}
Hoffentlich könnt ihr mir helfen
Gruß Nick
Nickrossi Gast |