Quantcast
Viewing all articles
Browse latest Browse all 6336

[скрипт] Плавное изменение размеров и позиции компонентов

Надоело каждый раз писать скрипты анимации для каждой программы... Решил сделать универсальный класс для плавной анимации объектов, а именно изменения их размеров и позиции
PHP код:

/*
================================================
= ###    #####   ###  ##### #####  ##### ###    =
= #  #   #      #   #   #       #  #     #  #   =
= ###    #####   #      #      #   ##### ###    =
= # #    #        #     #     #    #     #  #   =
= #  #   #         #    #    #     #     #   #  =
= #   #  #####  ###   ##### #####  ##### #    # =
================================================
###################################################
############# Resizer V0.1 by kurandx #############
###################################################
Использование класса:
{ ... } Если установить false, то свойство не будет учитываться

resize::resize_object(Объект, {Функция*}, {скорость**}, {задать w}, {задать h}, {задать x}, {задать y}) - Анимировать объект, плавно переместив его в координаты
*Выполняется когда объект приехал в нужыне коордитаты
**Если FALSE то скорость по умолчанию

resize::set_speed(Скорость) - Задать скорость по умолчанию
resize::get_speed() - Возвращает скорость по умолчанию
*/
class resize{
    private static 
$objects = array();
    private static 
$speed 15;
    static function 
resize_object($obj$func=false$speed=false$w=false$h=false$x=false$y=false)
    {
        
resize::$objects[$obj->self] = array($obj, array($w$h), array($x$y), $func$speed);
    }
    static function 
set_speed($i)
    {
        
resize::$speed $i;
    }
    static function 
get_speed()
    {
        return 
resize::$speed;
    }
    static function 
tick()
    {
        
$objs = &resize::$objects;
        
$s count($objs);
        if(
$s>0)
        {
            foreach(
$objs as $i=>$obj)
            {
                list(
$object$wh$xy$func$speed) = $obj;

                
$r[0] = resize::eval_formule($object->w$wh[0]);
                
$r[1] = resize::eval_formule($object->h$wh[1]);
                
$r[2] = resize::eval_formule($object->x$xy[0]);
                
$r[3] = resize::eval_formule($object->y$xy[1]);
                
                if(
$r[0]===false&&$r[1]===false&&$r[2]===false&&$r[3]===false)
                {
                    unset(
resize::$objects[$i]);
                    if(
$wh[0]!==false$object->$wh[0];
                    if(
$wh[1]!==false$object->$wh[1];
                    if(
$xy[0]!==false$object->$xy[0];
                    if(
$xy[1]!==false$object->$xy[1];
                    if(
$func!==false && function_exists($func) ) call_user_func_array($func, array($object->self));
                    continue;
                }
                else
                {
                    if(
$r[0]!==false$object->+= $r[0];
                    if(
$r[1]!==false$object->+= $r[1];
                    if(
$r[2]!==false$object->+= $r[2];
                    if(
$r[3]!==false$object->+= $r[3];
                }
            }
        }
    }
    private static function 
eval_formule($x$y$speed=false)
    {
        if(
$x===false || $y===false) return false;
        if(
$speed===false$speed resize::$speed;
        
$r = ($y-$x)/100*resize::$speed;
        if(
$r==0) return false;
        return 
$r>0?ceil($r):floor($r);
    }
}
setTimer(5'resize::tick();'); 

Этот код надо положить в скрипты, иначе... BCompiler будет ругаться на класс в классе...
все параметры статического метода resize::resize_object(...) кроме объекта могут быть равны FALSE, и этот параметр объекта не будет изменен. Так же есть глобальное значение скорости, если параметр = FALSE. Но для каждого объекта его можно менять.
Ну, и пример. Куда же без него :)
Вложения

Viewing all articles
Browse latest Browse all 6336

Trending Articles