Kolizje i Ruch

0

Mam pewien problem. Od dłuższego czasu wykonuje niestworzone rzeczy żeby złapać błąd i nie mogę ...

Animate() - Ustala wartość zmiennej (mojego) typu CVector ({float x, float y}) - move.

A potem albo następuje kolizja, albo następuje ruch ( x+move.x, y+move.y)

void CEngineMain::ColizionSystem(){
if(layer[9]){

for(int i=0;i<50;i++){
 if(layer[9]->objects[i])layer[9]->objects[i]->Animate();
}

for(int i=0;i<5;i++){
 if(layer[9]->objectsM[i])layer[9]->objectsM[i]->Animate();
}

bool end=false;

for(int i=0;i<5;i++){
for(int a=0;a<50;a++){
if(layer[9]->objectsM[i] && layer[9]->objects[a]){
if(layer[9]->objectsM[i]->move.x==0 && layer[9]->objectsM[i]->move.y==0){
}
else{
if(a==0 && i==0)aa=layer[9]->objectsM[0]->move.x;
        if(layer[9]->objectsM[i]->x + layer[9]->objectsM[i]->move.x > layer[9]->objects[a]->x - 1.0*layer[9]->objects[a]->width && layer[9]->objectsM[i]->x + layer[9]->objectsM[i]->move.x < layer[9]->objects[a]->x + 1.0*layer[9]->objects[a]->width){
        if(layer[9]->objectsM[i]->y + layer[9]->objectsM[i]->move.y > layer[9]->objects[a]->y - 1.0*layer[9]->objects[a]->height && layer[9]->objectsM[i]->y + layer[9]->objectsM[i]->move.y < layer[9]->objects[a]->y + 1.0*layer[9]->objects[a]->height){
        layer[9]->objects[a]->Colizion(layer[9]->objectsM[i]);

        end=true;
        }
        }
        if(!end){
                layer[9]->objectsM[i]->x+=layer[9]->objectsM[i]->move.x;
                layer[9]->objectsM[i]->y+=layer[9]->objectsM[i]->move.y;
                layer[9]->objectsM[i]->move.x=0;
                layer[9]->objectsM[i]->move.y=0;
                }
}
}
end=false;
}

}
}
}

Z góry dzięki za pomoc

0

Wez to sformatuj po ludzku, bo kompilatorem nie jestem.

0

W najbardziej namieszanej pętli w kolizji layer[9]->objects[a] zastąpie lobject[a], a layer[9]->objectsM[i] lobjectM[i]

void CEngineMain::ColizionSystem(){
if(layer[9]){

for(int i=0;i<50;i++){
if(layer[9]->objects[i])layer[9]->objects[i]->Animate();
}

for(int i=0;i<5;i++){
if(layer[9]->objectsM[i])layer[9]->objectsM[i]->Animate();
}

bool end=false;

for(int i=0;i<5;i++){
for(int a=0;a<50;a++){
if(layer[9]->objectsM[i] && lobject[a]){
if(layer[9]->objectsM[i]->move.x==0 && layer[9]->objectsM[i]->move.y==0){
}
else{
if(a==0 && i==0)aa=layer[9]->objectsM[0]->move.x;

if(lobjectM[i]->x + lobjectM[i]->move.x > lobject[a]->x - 1.0*lobject[a]->width && lobjectM[i]->x + lobjectM[i]->move.x < lobject[a]->x+ 1.0*lobject[a]->width){

if(lobjectM[i]->y + lobjectM[i]->move.y > lobject[a]->y - 1.0*lobject[a]->height && lobjectM[i]->y+ lobjectM[i]->move.y < lobject[a]->y+ 1.0*lobject[a]->height){

       lobject[a]->Colizion(lobjectM[i]);
       end=true;
}
}
        if(!end){
                layer[9]->objectsM[i]->x+=layer[9]->objectsM[i]->move.x;
                layer[9]->objectsM[i]->y+=layer[9]->objectsM[i]->move.y;
                layer[9]->objectsM[i]->move.x=0;
                layer[9]->objectsM[i]->move.y=0;
                }
}
}
end=false;
}

}
}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1