GMC Bulgaria

Здравейте ( Вход | Регистрация )

2 страници V  < 1 2  
Reply to this topicStart new topic
Motion_set()
Пешо
коментар 05:38:57, 11-February-2011, Friday
Коментар #21


Редовен бъбривко
Икона на група

Група: Администратор
Коментари: 661
Регистриран: 08.07.05
Град: Бургас
Потребител № 44



Все пак пиша система за създаване на игри - знам какви са основните алгоритми за реализация на колижън чекинг, не са никак леки и задължително са свързани с цикъл, обхождащ всяко едно обектче и инстанцийка в стаята ти.... При това, някои алгоритми трябва освен да обходят всичко веднъж, да смятат 1000 неща с тежки функции като sin и cos, което е просто убийствено...

Ето примерна имплементация на класическия point_distance() например:
С++
Код
float point_distance(float x1,float y1,float x2,float y2)
{
    return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
}

Да не говорим, че в Game Maker нямаше функция дето връща пресечната точка на две линии....

ето как изглежда тази функция, която в моята среда ЩЕ я има:
С++
Код
int lines_intersect(float x0,float y0,float x1,float y1,
                    float x2,float y2,float x3,float y3,float *x,float *y)
{
    float d=(x1-x0)*(y3-y2)-(y1-y0)*(x3-x2);
    if (abs(d)<1.0001) {return -1;}
    float AB=((y0-y2)*(x3-x2)-(x0-x2)*(y3-y2))/d;
    if (AB>0.0001 && AB<1.0001)
    {
        float CD=((y0-y2)*(x1-x0)-(x0-x2)*(y1-y0))/d;
        if (CD>0.0001 && CD<1.0001)
        {
            *x=x0+AB*(x1-x0)+1;
            *y=y0+AB*(y1-y0);
            return 1;
        }
    }
    return 0;
}


Помисли си сега, ако трябва тези две да се викат от всеки обект със всеки, или поне от един обект с всички? smile.gif


--------------------
Go to the top of the page
 
+Quote Post

2 страници V  < 1 2
Reply to this topicStart new topic
1 потребител(и) четат тази тема (1 гости и 0 скрити)
0 Потребител(и):

 



Олекотена версия Час: 00:42:16, 19.05.24